问答详情
源自:9-9 Java 中的 Object 类 Ⅱ

五分三十七秒那句理解不了

老师说:判断两个引用的值是否相等,比较的也是地址。

但是看如下代码:

public class A{

    private int num=1;

    private int num2=1;

     public static void main (String[]args){

        A a=new A();

        A a2=new A();

    if(a.num==a2.num2)

        System.out.println("两个值相同");

    else 

        System.out.println("两个值不同");

}

}


为什么我这输出的是:两个值相同。

请各路大神解一解


提问者:慕仙6066462 2019-10-08 09:23

个回答

  • 慕运维8340830
    2019-10-08 13:41:07
    已采纳

     if(a.num==a2.num2)应该改成

     if(a==a2)

    a.属性就是值了。而你a虽然给了值,a==a2不是比较值,还是地址

  • Code小白k1
    2019-10-08 11:49:52

    复杂点的说的话

    你在创建一个字符串属性或者变量是会先在内存中的常量池中去寻找是否有你要创建的字符串(是否查找也和字符串创建方式有关)如果有就不会再创建了,所以你使用equals 比较字符串时 只要比较地址就可以知道是否值是相等的了  

  • Code小白k1
    2019-10-08 11:42:40

    == 比较的时对象的值

    equals比较的是对象的地址