Strng a=new String("aaa");
String b="aaa";
String c="aaa";
System.out.println(a==b);
System.out.println(b==c);结果让我有点糊涂,各位大侠能否给解释一下

解决方案 »

  1.   

    Strng a=new String("aaa"); a是申请的一个值为aaa的字符串对象,b,c是一个字符串变量;
    注意对象的概念你就明白了
      

  2.   

    Strng a=new String("aaa");会产生两个对象,当然常量池中已经存在“aaa”的话,那么就产生一个对象,就是指向“aaa”的引用。
      

  3.   

    常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。b和c中的”aaa“都是字符串常量,它们在编译期就被确定了。b,c都是常量池中”aaa”的一个引用。用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。所以a和 b,c 指向不同的地址。
      

  4.   

    字符串的比较必须用equals方法!
      

  5.   

    new出来的是存放在堆空间的对象
      

  6.   

    Strng a=new String("aaa");
    String b="aaa";
    String c="aaa";
    System.out.println(a==b);
    System.out.println(b==c);a==b是FALSE 
    b==c是TRUE
    a是栈中声明的对象,new String("aaa") 在常量池中创建了aaa
    b和c也都是栈中声明的对象。只是他们指向同一个地址。
      

  7.   


    equals是比较字符串的数值。。
    =是比较字符串的内存地址。。
      

  8.   

    关注
    J2EE技术交流群 67488968
    相互交流,共同提高,期待你的加入
      

  9.   

    字符串的比较必须用equals方法,否则不一定对!
    内存比较就必须用equals方法.
      

  10.   

    String b = "aaa";
    "aaa"放在了哪里new String("aaa"); 是放在哪里?
      

  11.   

    引用 7 楼 vincent201201 的回复:
    Strng a=new String("aaa"); 
    String b="aaa"; 
    String c="aaa"; 
    System.out.println(a==b); 
    System.out.println(b==c); a==b是FALSE 
    b==c是TRUE 
    a是栈中声明的对象,new String("aaa") 在常量池中创建了aaa 
    b和c也都是栈中声明的对象。只是他们指向同一个地址。
    给加分吧,说的真好顶一下