按照Java的重点介绍==是比较两个对象是否相等,且Java中对String的赋值都是产生一个新的对象,原有的字符串变成了垃圾内存。但我用下面的类测试了一下,却得到了两种截然不同的结果,不知何解?
class StringTest
{
public static void main(String args[])
{
String str1="Hellow World";
String str2="Hellow World";
String str3=new String("Hellow World");
String str4=new String("Hellow World");
if (str1==str2)
{
System.out.println("str1==str2");
}
else
System.out.println("str1!=str2");
if (str3==str4)
{
System.out.println("str3==str4");
}
else
System.out.println("str3!=str4");
}
}
输出结果为
str1==str2
str3!=str4
按照Java的解释,得到的结果应该都是不等于啊?
class StringTest
{
public static void main(String args[])
{
String str1="Hellow World";
String str2="Hellow World";
String str3=new String("Hellow World");
String str4=new String("Hellow World");
if (str1==str2)
{
System.out.println("str1==str2");
}
else
System.out.println("str1!=str2");
if (str3==str4)
{
System.out.println("str3==str4");
}
else
System.out.println("str3!=str4");
}
}
输出结果为
str1==str2
str3!=str4
按照Java的解释,得到的结果应该都是不等于啊?
String str1="Hellow World";
String str2="Hellow World";
String str3=new String("Hellow World");
String str4=new String("Hellow World");
中:str1 str2是指向同一个对象。str3 str4是指向不同的对象。OK?
和STR2.所以他们是相等的。
而当你NEW 了一个以后,他们就在堆内存中存放了.把不同的地址赋给了 STR3 STR4
System.out.println("str3==str4");}
str1="hello word";
str2="hello word"
str3 = new String("hell word")
str4 = new String("hell word")
不管str="hell word"和str3 = new String("hello word")都是放在堆中的,上面的定义来看是实例化了4个对象,其实只是实例化的3个对象,因为在java中有字符数据池,对于str2在赋值之前会检查内存中会有没有相同的数据,如果有则直接引用而对于str3,str3则不会检查直接实例化,所以会出现以上结果。
还一个是 对象 对象基本类型的数据被加载到了内存池中
那么
String str1= "Hellow World" ;
String str2="Hellow World";
这两个,str1和str2两个对象都指向内存池中的"Hellow World"这个对象
也就是说,其实这两句只构造了两个对象而
String str3=new String("Hellow World");
String str4=new String("Hellow World");
他们分别构造了str3,str4,还有两个"Hellow World"对象。是因为它们都用了new关键字来构造对象,而用new构造的对象之前是没有被加入内存池中的,所以要另外加载过来,然后,把str3和str4分别指向所对应的Hellow World对象。现在我们来看,str1和str2指向的都是内存池中原来的Hellow World对象
而str3指向的是后来加入的一个Hellow World对象,str4指向的又是另外一个后来加入的Hellow World对象这样说你还不知道的话 就去睡觉吧 别浪费时间了
String str2="Hellow World";
这两个,str1和str2两个对象都指向内存池中的"Hellow World"这个对象
也就是说,其实这两句只构造了两个对象
---------------------------------------------------
楼上的楼上说这2句只构造了两个对象,我觉得是3个, str1 str2 "Hellow World"
{
public static void main(String args[])
{
String str1="Hellow World";
String str2="Hellow World";
String str3=new String("Hellow World");
String str4=new String("Hellow World");
if (str1。equals(str2))
{
System.out.println("str1==str2");
}
else
System.out.println("str1!=str2");
if (str3.equals(str4))
{
System.out.println("str3==str4");
}
else
System.out.println("str3!=str4");}
}
输出:
str1==str2
str3==str4
内存,对象