本帖最后由 周兴中 于 2012-6-24 21:31 编辑
String s1="abc";
String s2="abc";
以上两句话表示s1和s2都指向了堆内存中的"abc"
因为"=="比较的是对象的地址值,所以 s1==s2 为true
那为什么
String s3=new String("java");
s3=="java" 的结果却为false,难道是这句话先是在堆内存中又创建了一个String对象,其值为java吗?
听完你们回答貌似更模糊了.
String s3 = new String("java"); // 在堆内存开辟空间存储String类型的 java ,s3则在栈内存中指向 java ,既 s3的值为 java 这个对象在内存中的地址.
System.out.println(s3 == "java"); //返回false,为什么? 这句话不是表示 s3所指向的java的地址 是否等于 "java"对象的地址? "java"这个字符串在内存中我只new了一次,不是应该相等吗
String s1="abc";
System.out.println(s1=="abc");//返回true,为什么? |
|