A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵佳 初级黑马   /  2013-7-6 09:27  /  1730 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class RandomTest {
public static void main(String[] args) {
  if(args==null|| new RandomTest(){{RandomTest.main(null);}}.equals(null)){
   System.out.print("hello");
  }else{
   System.out.print("world");
  }
}
}

这个输出的是helloworld 请问new RandomTest(){{RandomTest.main(null);}}.equals(null))这句代码是什么意思?

1 个回复

倒序浏览

我的是这样理解的..系统刚进来时判断 if(args==null|| new RandomTest(){{RandomTest.main(null);}}.equals(null)),这时args并不为空,只是这个String数组长度为0而已,还是有对象存在的。前半句为false所以就执行后面的new RandomTest(){{RandomTest.main(null);}}.equals(null)。这里有生成一个匿名内部类的对象,对象继承自RandomTest类自己。RandomTest.main(null);  main方法也是静态方法可以通过类名直接调用,所以这里是再次调用了main方法,而这次传入的args就是null了,所以前半句判断完就输出了hello,然后又回来接着判断new RandomTest(){{RandomTest.main(null);}}.equals(null)。因为还没完。这时比较的是new RandomTest(){{RandomTest.main(null);}}是不是为null,但这个对象是存在的,所以这个判断也为假。两边判断都为假所以就打印word了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马