看到一个关于String的帖子
public class Test {
    public static void main(String[] args) {
        String s1 = "sss111";
        String s2 = "sss111";
    }
}在上面程序中存在2个相同的常量"sss111",对于n个值相同的String常量,在Constant Pool中
只会创建一个,所以在编译好的class文件中,我们只能找到一个对"sss111"的表示:
String s1 = "sss111"应该是一个局部变量才对,不是有final修饰符的才是常量吗?

解决方案 »

  1.   

    s1,s2是指向一个String的变量,
    "sss111" 是一个固定的字符串,在java中创建好的字符串时不能被修改的,故为常量
      

  2.   

    s1,s2是局部变量,(引用类型)
    sss111 在java栈中被共享。s1,s2都指向sss111
      

  3.   

    s1,s2这是变量。
    "sss111"这是字面常量先区分对象和引用再说。
      

  4.   

    这句话这么说可能会好一点:s1和s2的确是局部变量,储存在栈中,他们都指向同一个String对象"sss111",该对象在常量池中
      

  5.   

    在常量池中只创建一个“sss111”,但s1,s2都持有他的引用
    字符串很特别,s1和s2都是常量
    所有的字符串变量都是常量,它们的值不会发生改变,改变的只是引用
      

  6.   

    s1和s2都引用共享了字符串“sss111“. 它们都是局部变量,字符串“sss111“是个值不是变量。s1和s2的引用变了也就不指向字符串“sss111“了. 
      

  7.   

    String变量是引用类型,必定指向一个对象。
    public class Test { 
        public static void main(String[] args) { 
            String s1 = "sss111"; 
            String s2 = "sss111"; 
        } 

    s1,s2都变量,在stack中,保存了常量"sss111"的引用,这里有别于final String s1 = "sss111"; s1保存的引用是一个常量,也就是说s1只能指向内存中的某个区域。  
      

  8.   

    都是变量。只是都指向String常量池中sss111
      

  9.   

    都是变量。只是都指向String常量池中sss111
      

  10.   

    它这句常量应该是因为string的一旦创建了就不可变了 所以说是常量的吧。但是S1 S2是2个对象 他们的引用相同而已。楼主貌似搞混了。
      

  11.   

    String s1,s2都是变量  只是他们在内存地址中指向同一个地址
      

  12.   

    常量...两个引用....如果修改的话..就引用别的了..在JAVA学习笔记讲的很清晰的..去看看非常好的..
      

  13.   

    明显s1,s2都是变量,如果硬要说的话——"sss111"是常量...
      

  14.   

    都是变量。只是都指向String常量池中sss111,这就是字符串的特别之处
      

  15.   

    他们都指向sss111
    所以就只有一个sss111 
      

  16.   

    都是变量,只是都指向String常量池中sss111
      

  17.   

    "sss111"是一个字符串常量,java为每一个String类型(有别于StringBuffer)的字符串在内存中申请一块空间之后,这块空间的内容就不会变了,所以说它是常量,而s1和s2是两个字符串“类”类型的变量,对一个类的实例名来说,它的“值”只不过是一个内存地址(可以说是一个整数值?),而这个内存地址指向的地方存着这个实例的具体的“内容”,s1和s2只不过是“恰好”拥有相同的“值”,即存放实际内容的内存地址,所以如果这时用s1 == s2来判断的话,因为它们的“值”相同,所以应该是true,你可以这样试试:
    String s1=new String("sss111");
    String s2=new String("sss111");

    String s1 = "sss111";
    String s2 = "sss111";
    比较一下“==”的结果这是java对字符串常量(String类型)的“存储优化”(同一个常量只申请一块内存空间,申请之后不再变化),不知道我这样理解对不对,呵呵。