public static void main(String[] args) {
   String s1="m"; 
   String s2="n"; 
   String s3=s1+s2; 
   String s4=s1+s2; 
   System.out.println(s3==s4); 
   System.out.println(s3); 
   System.out.println(s4); 
      }
上述程序,为何System.out.println(s3==s4); 运行是false.这两个字符串的地址一是一样的?

解决方案 »

  1.   

    s3和s4引用的是两个不同的对象,它们不是用字符串常量赋值的,所以不会出现地址相同的情况。
    我猜,楼主是因为   String s1="m"; 
       String s2="m";而s1==s2,所以才问的这个问题。
    java有字符串常量池,像s3,s4使用字符串表达式赋值的,虽然内容一样,但是运算后产生新的对象赋给s3,s4,所以地址必然不同。
      

  2.   

    System.out.println(s3.equals(s4)); 
    楼主可以试试这个
    运行是true
      

  3.   

    s3 , s4是指向两个不同的地址
      String s3=(s1+s2).intern(); 
      String s4=(s1+s2).intern();
      System.out.println(s3==s4); //则是true看看http://topic.csdn.net/u/20090519/18/7b8cf7ef-bc06-4d26-8a2c-692eb0562231.html