昨天在一个贴里看到如下一个题目String a="java";
String b="java";
String c=new String("java");
d="ja";
e="va";
f="ja"+"va";
g=d+e;
h=c;我想问下为什么a==g返回值为false;g的值也应该是java,==是指向内存地址空间。我想也应该指向同一地址才对啊。
String b="java";
String c=new String("java");
d="ja";
e="va";
f="ja"+"va";
g=d+e;
h=c;我想问下为什么a==g返回值为false;g的值也应该是java,==是指向内存地址空间。我想也应该指向同一地址才对啊。
a,d,e指向三个不同的地址,虽然d+e=java,但是这种拼接的字符串与a还是指向不同的地址。
String a = "java";
String b = "java";
String c = a + "g";
String d = b + "g";
System.out.println(a==b);//true
System.out.println(c==d);//false.虽然c与d的内容相同
String b = "java";
String c = new String("java");
String d = new String("java");
我只有一句话要说:a和b指向同一个地址!c和d指向不同的地址!
如此,如果你用new 就是在堆中申请了一个空间,虽然内容一样,但地址是不同的!
用“+”最后也是 new 了一个新的返回给你,自然也不同了!
String a = "java";
String b = "java";
他们在常量池是一个对像.也就是在堆中他们是一个东西!但是他有两个不同的引用.也就是在栈中他们是两个东西!而我们在用==比较的时候是比较栈中的东西是不是相等!用equals是比较堆中东西是不是相等!不知道我理解的对不对!
equals 比较两个引用类型的内容是否相等