为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

但是看如下代码:

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 回答

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

 if(a==a2)

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

1 回复 有任何疑惑可以回复我~
#1

慕仙6066462 提问者

我大概知道了,老师说的引用的值,这里面的“引用”指的是a和a2,我一直以为这两个叫做对象,今天看书才知道这也叫做对象的引用。这样的话,比较引用的值就是比较他们的地址了。
2019-10-09 回复 有任何疑惑可以回复我~

复杂点的说的话

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

1 回复 有任何疑惑可以回复我~

== 比较的时对象的值

equals比较的是对象的地址

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       529881    人
  • 解答问题       6086    个

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

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信