为什么输出this对象不一样,而用lambda表达式输出就一样
运行效果等价,但是语法不等价。
lambda表达式定义了一个匿名函数,它没有参数,没有返回值。这个函数于Runnable要求的函数 void run()接口相同,所以可以付给Runnable。这里并没有定义一个新的类。
附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。赞助多少都可以。多谢。
第一个图片里代码,每个线程里 new Runnable() { .... } 定义了一个匿名类(是Runnable的子类),所以里面的this其实是这个匿名类的对象的地址。3个线程分别定义了3个不同的匿名类,虽然代码是一样的,但是是不同的类。它们的对象地址当然也不同。
第三个图片就只有一个类,没有定义新的类。所以这些this就是同一个对象。
要避免图一里的坑,好的编码风格是在函数testThis里第一行就记录自己的地址 Object self = this; 然后后面代码里全用self,避免 this坑。