运行效果如图为什么第二个用==比较的结果也为true

解决方案 »

  1.   

    因为他比较的是name字段,也就是String数据类型的值而已
      

  2.   

    原则上来说String是个引用型数据类型,应该用equals比较但是,String是个特殊的引用数据类型,因为他会在你每形成一个字符串时都会放到一个常量池中,到时候如果再形成字符串的时候,会先在常量池寻找,所以值为true
      

  3.   

    我没明白为什么是比较的只是String的值,==不是比较两者在的值栈的地址吗?
      

  4.   

    前两个比较的是字符串,最后一个比较的是对象,没创建一个对象,地址都是不一样的,所以false
      

  5.   

    第二个东西,getName的值,两者的值不是一样的么?
      

  6.   

    这个设计到了String常量池的概念
      

  7.   

    貌似string比较特殊,
      

  8.   

    直接拿值比较当然true,第三个拿地址用==比较,肯定是flase
      

  9.   

    equals方法被从写了,所以第一个也会是比较值
      

  10.   

    string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;
      

  11.   

    我是楼上,这个说法不对,我擦,复制的答案就是不靠谱,你看看你的equal方法是不是被覆盖了,顺道把我那个答案删除了。。别误人子弟
      

  12.   

    找到答案了,也实验过了,这个涉及到常量池的概念
    u1.setName('lte')这种是放在常量池的,u2.setName('lte')还会去常量池中找
    这两个是的同一个对象,地址值相同,值也相同
    但是new 这种就不会放常量池了 用==号就flase了
    删了楼上两个吧
      

  13.   

    字符串在Java里是特殊的引用类型。
    new一个String的话,它会在堆里分配内存,那么两个具有相同内容的字符串用==比较会不同,而直接用“字符串内容”的形式给字符串变量赋值的话,Java会去字符串缓冲区找,没有的话在那里创建一个,有的话,直接拿过来用。
    楼主的程序在给name赋值时用的是第二种形式,第一次是创建了一个字符串常量,第二次是取用字符串常量,所以,用==比较结果为true。
      

  14.   

    上面的大神说的是对的,string是存在常量池的,第一个ltj定义了之后,第二个ltj就会在常量池中去寻找这个值的字符串,找到后就直接引用,不会再去new一个新的。所以第二个==会返回true。
      

  15.   

    u1.setName("ltj");
    u2.setName(new String("ltj"));这样试试
      

  16.   

    == 符号比较的是两个对象是否相同
    就象两个人是双胞胎,就算看起来完全相,但他们还是两个人,你给哥哥拍一耳光,弟弟一般是不会疼的再有就是字符串的常量池,在java中,如果编译期间可以确定值的字符串,在运行时会放到常量池中,如果字符串的内容相同,是会指向同一个对象的,以节省内存;而在运行时才能确定内容的字符串,则不会放进常量池。 
      

  17.   

    ==比较的是存储的地址,equals比较的是值
    比如X,Y变量所在的地址是不一样的,可是他们存储的值可以一样
    所以X==Y等于false,X.equals(Y)等于true
      

  18.   

    java的String 对象equals是被重写过的,比较的是内容。你可以看一下apipublic boolean equals(Object anObject)Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.Overrides:
        equals in class Object
    Parameters:
        anObject - The object to compare this String against
    Returns:
        true if the given object represents a String equivalent to this string, false otherwise
    See Also:
        compareTo(String), equalsIgnoreCase(String)
    以上摘自java api文档
    说的很清楚了,会比较字符
      

  19.   

    java 的数据类型可以分为两类:
    基本数据类型(值类型)byte,short,char ,int,long,float ,double,boolean.他们之间用== 比较是比较值
    引用类型: 当使用 ==比较的是内存中存放的地址。所以new出来的对象,即使所有字段一样。但是他们存放内存地址也不同。
    equals 是Object 中方法,在String,integer等类中重写了该方法,只比较值,而不是内存存放地址。
    其他类在不重写equals方法情况下,只对比内存地址。即和==是一样的结果