String s1="123";
Stirng s2="123";
s1==s2 为TRUE,为什么呢,
String 不是引用类型吗,==是比较内存地址的
为什么在这里内存地址相同了呢?

解决方案 »

  1.   

    对于String来说
    “123”值相等的话
    它们会使用同一个引用的
      

  2.   

    老问题!常量区中只有一个"123",s1和s2指向的都是这个地址,
    这样就不是了,String s1="123"; String s2 = new String("123");
    s1==s2就是false.
      

  3.   

    String的设计属于共享设计,所以如果直接赋值的话是不会重新开辟新的内存空间的,所以地址是一样的
      

  4.   

    这个还真没用过,一般得用equals方法。
      

  5.   

    String类是引用类型 并且声明为String类型的变量不可以修改内容 就像你声明的s1和s2变量 其内容都是123 这只是说明String类型而“==”运算符简单来说是比较两个变量是否指向同一个内存地址  所以是TRUE建议你去看看“==”运算符与equals()方法的区别
      

  6.   

    String s1="123"; 
    Stirng s2="123"; 
    这两句是不是跟下面两句要表示的意义差不多
    String a="foo";
    String b=new String("foo").intern();
      

  7.   

    String的设计采用共享式的,有一个常量池用来存贮。
    如果一个String在常量池中已经存在,下次就直接引用这个,不再新创建一个对象。