String s1 = "asdf";
String s2 = "asdf";s1==s2;  为什么是flase???他们不是指向同一地址?

解决方案 »

  1.   

    这个这个还用问吗??
    指向地址不同。当然false.
      

  2.   


    当建立s2的时候,发现内存中有"asdf",s2不就应该 也指向他么?
      

  3.   

    S1 和 S2 是两个对象。S1 所指的 ASDF 和 S2 所指的 ASDF 是不一样的它们是两块不同的区域。
      

  4.   

    String s1时,系统会在栈内存中创建一个 s1引用,而实际的内容则保留在内存的堆里
    String s2时,则是创建另外一个引用
    String s1==s2只是比较两个对象的引用地址,显然他们两个的引用地址不同,所以不等
      

  5.   

    肯定是true 如果 是
    String s1 = new String("asdf"); 
    String s2 = new String("asdf");
    这样  s1 == s2
    就是false 直接 用 String s1 ="asdf" 这种形式 s1对象是放在常量池中的 
    当s2 发现常量池中有一个"asdf"对象是就不会在去创建一个新的对象
    而 String s2 = new String("asdf"); 这种形式是在堆中开辟的
    内存.所以创建的是两个不同的对象.
      

  6.   

    试了一下,答案是true。用new String()才会创建String对象,而直接使用String 定义相同的字符串指向同一对象,不知道java编译器是怎么区分s1和s2是相同的内容,挺奇怪的
      

  7.   

    楼主是TRUE啊 
    貌似是String a = new String("asdf"); String b = new String("asdf"); a == b;这个才是false吧? 
      

  8.   

    指向同一地址!对象不同???在String池里不就是只创建了一个"asdf"吗?我觉得就是同一对象!
      

  9.   

    如果用对象赋值,那么就指向的是同一个内存空间,如果是单独的重定义一个对象,那么,只能是值相等,而内存空间是重新分配的.
    例:String a="abcd";
    String b="abcd";//b和a的值相等,但是占有不同的内存空间.
    String c=a;//c和a的值相等,并且引用了用以内存空间.我也初学,希望可以帮到你....
      

  10.   

    String a = new String("asdf"); String b = new String("asdf"); a == b;  这个是true
    String s1 = "asdf"; String s2 = "asdf"; s1==s2;  false
    支持8楼说法,,,
    -----------楼主结贴吧,,
      

  11.   

    谢谢大家,我知道我怎么错了,我写出来,希望大家不要和我一样。
    class wrenwren {
    public static void main(String args[])
    {
    String a = "cc";
    String b = "cc";
    System.out.println("a==b"+a==b);
    }
    }
    我是这样验证的,结果既不是a==btrue,也不是a==bflase。
    而是false,看了结果,我都没考虑a==b哪去了,就来这里问,实在不好意思。
      

  12.   

    大家没事到我的博客上看一下,http://i.cn.yahoo.com/05654311083谢谢支持!
      

  13.   

    http://www.japee.com.cn/jew/pages/Main.aspx