1.今天看到一题String的笔试题
String a = "a";
String b = "b";
String c = a + b;
System.out.println("ab"==c);
上面的代码,虽然又联想到字符串常量池,但是还是做错了。原因如下图:
似乎变量参与连接运算的都会再编译的时候创建一个StringBulider。所以地址并不是直接指向字符串常量池的。像下面这样也是false。
Integer面试题
Integer a = 666;
Integer b = 666;
System.out.println(a==b);//false
以上结果为false,因为Integer类里面有个静态类,静态类里有个缓存池叫intergecache,他会从一开始就将-128到127的数字全部存到这个数组中,所以如果再这个范围内就会直接使用缓存池中的数字,超出这个范围则会new一个新的对象。
Integer a = 100;
Integer b = 100;
System.out.println(a==b);