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

来源:9-9 Java 中的 Object 类 Ⅱ

慕仙6066462

2019-10-08 09:23

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

但是看如下代码:

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("两个值不同");

}

}


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

请各路大神解一解


写回答 关注

3回答

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

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

     if(a==a2)

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

    慕仙6066...

    我大概知道了,老师说的引用的值,这里面的“引用”指的是a和a2,我一直以为这两个叫做对象,今天看书才知道这也叫做对象的引用。这样的话,比较引用的值就是比较他们的地址了。

    2019-10-09 16:41:03

    共 1 条回复 >

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

    复杂点的说的话

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

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

    == 比较的时对象的值

    equals比较的是对象的地址

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530667 学习 · 6091 问题

查看课程

相似问题