public class Test {
static String str1 = "Hello";
static String str2 = "Hello"; public static void main(String[] args) {
System.out.println(str1 == str2);
}
}
为什么输出是true?

解决方案 »

  1.   

    String有一个池的概念,并不是每次都去创建新的对象,而是先去池里找,如果池里有的话,就用以前的,所以是true
      

  2.   

    str1和str2指向了同一内存。。所以当然就为ture咯!!!
      

  3.   

    http://hi.baidu.com/langchao826/blog/item/6836dfefd14a7f13fcfa3c23.html
    仔细看看,讲得比较清楚
      

  4.   

    这个跟静态恐怕没什么关系public class Test10 {
       
          public static void main(String args[]){
           String str1 = "Hello";
           String str2 = "Hello";
           System.out.println(str1==str2);
       }
        
        
    }结果为true
    public class Test10 {
       
          public static void main(String args[]){
           String str1 = new String("Hello");
               String str2 = "Hello";
           System.out.println(str1==str2);
       }
        
        
    }结果为false==用来比较是否指向同一块内存,第二种创建字符串的方法在内存中开辟了2块空间分别用来存放str1和str2,注意比较
      

  5.   

    看这个更特殊的例子public class T {
      public static void main(String[] args) {
        String a = "1234";
        String b = "1234";
        System.out.println(a == b); // true
        System.out.println(a == TT.c); // true
        System.out.println(a == new TT().d); // true
        a = new String("1234");
        b = new String("1234");
        System.out.println(a == b); // false
      }
    }class TT {
      static String c = "1234";
      String d = "1234";
    }
      

  6.   

    string 是一个final,immutable类
    通过直接字符串赋值变量,会在stack中生成一个引用变量,和char[]数组,char[]在stack的字符串池进行共享,提高内存读写利用率,而==比较的是内容是否相等,相当于在stack中有两个引用变量都指向一块内存地址,当然相等
    想想如果读写一文本文件,该有多少字符,重复的怎么办,要不断的创建对象,肯定不行,就是在字符串池中共享....
      

  7.   

    a = new String("1234");
        b = new String("1234");
        System.out.println(a == b); // false
    为什么是false 呢?
      

  8.   

    7楼的例子再好不过了
    很明确的说明了这个问题:
    直接用String定义的变量只要值一样,都指向同一块内存。
    而用new String()出来的对象尽管值一样,也不在同一块内存中,
    "==" 是比较俩个字符串是否指向同一内存。如果想比较值用equals方法。
      

  9.   



    String a = "1234";
        String b = "1234";
        System.out.println(a == b); // true
    在java里它们不是为了简单,串也可以像简单的数据类型一样生成吗?
    它们的效果应该是一样的吧?!
      

  10.   

    十二楼说的很清楚了:
        直接用String定义的变量只要值一样,都指向同一块内存。值存在“池”中。 
    而用new String()出来的对象尽管值一样,也不在同一块内存中,值存在"堆"中 
    "==" 是比较俩个字符串是否指向同一内存。如果想比较值用equals方法。