按照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的解释,得到的结果应该都是不等于啊?

解决方案 »

  1.   

    ==是比较二个引用变量是否相等(也可以说是看他们是否是指向同一个对象)。
                       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?
      

  2.   

    个人理解,在String str1="Hellow World";String str2="Hellow World";的时候,你在堆内存里没有开辟出一个新的地方来放这个"Hellow World".而只是把"Hellow World"的地址赋给了STR1
    和STR2.所以他们是相等的。
    而当你NEW 了一个以后,他们就在堆内存中存放了.把不同的地址赋给了 STR3 STR4
      

  3.   

    判断两个字符串是否相等,很少用==,而是用equals。if(str3.equals(str4)){

         System.out.println("str3==str4");}
      

  4.   

    在计算机中存储数据内存中有堆与栈,堆中存放的都是对象和值等,而栈中存放的是对于对象函数,变量的引用。上面的
    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则不会检查直接实例化,所以会出现以上结果。
      

  5.   

    主要一个是   内存      内存
    还一个是      对象      对象基本类型的数据被加载到了内存池中
    那么
                       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对象这样说你还不知道的话          就去睡觉吧       别浪费时间了
      

  6.   

    String str1= "Hellow World" ;
    String str2="Hellow World";
    这两个,str1和str2两个对象都指向内存池中的"Hellow World"这个对象
    也就是说,其实这两句只构造了两个对象
    ---------------------------------------------------
    楼上的楼上说这2句只构造了两个对象,我觉得是3个, str1 str2 "Hellow World"
      

  7.   

    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。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
    内存,对象
      

  8.   

    string1 string2 是赋值 后面是地址
      

  9.   

    http://www.java99.com/?m=ViewArticle&id=54这篇文章也许对你有帮助