今天去面试了,其中有几个笔试题,印象深刻(因为我不会,所以印象深刻)
代码如下:
package my;
public class main {
public static void main(String[] args) {
String a="hello";
String b="hello";
String c=new String("hello");
String d=new String("hello");
System.out.println(a==b);
System.out.println(c==d);
System.out.println(a==c);
}
}
运行结果如下:
造成这个结果的原因是(百度的):
如果是直接赋值的是取常量池的数据, 如果是new的,永远都是重新创建内存.
所以 s == d 因为在object比较中 ==比较的是内存地址, 而new String()是告诉jvm重新创建一块内存.
"hello"就是一个匿名对象, 引用的还是常量池的 你只需要理解 对象中==比较的是内存地址即可, new就是开辟一块内存