杨玉山

听说读写。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.“==”操作符是用来比较两个变量的值是否相等,如比较的是引用对象,则比较引用对象的内存地址是否相同,也就是是否指向同一个对象。

2.“eqauls”方法仅用于比较引用对象,默认行为是比较引用对象所指向的对象值是否相等,无论引用对象是否指向的统一对象,只要两个对象的值是相等的,则返回true。

3.在实际开发中,也会在自定义对象中重写“eqauls”方法,如果重写,则自定义对象的比较方法以实际重写逻辑进行比较。

下面给出代码示例,并说明具体情况

1 int i=0;
2 int j=0;
3 int k=1
4 System.out.println(i==j);//true
5 System.out.println(i==k);//false
1 Integer i1=new Integer(0);
2 Integer j1=new Integer(0);
3         
4 System.out.println(i1==j1);//因对象地址不一样,返回false
5 System.out.println(i1.equals(j1));//对象地址不一样,但两个对象的值相等,返回true

4.在此还有一个特殊说明,在java中String是特殊存储的,因String创建过程对资源消耗较大,java设计时String对象一旦被创建将不允许被修改,如果给字符串对象重新赋值,将重新指向另一个新的地址。

1 String s4="0";
2 String s5=s4;
3 System.out.println(s4==s5);//true
4 s4="1";
5 System.out.println(s4==s5);//s4被重新赋不同的值,指向不同的地址空间,返回false

5.如果使用直接赋值法创建两个String类型变量,赋相同的值,则java机制将会为第一个对象创建具体值并放入“字符串常量池”,当第二个对象被赋值时,直接指向“字符串常量池”中已有的值,如果使用new String()的方法赋值,则会在内存堆为该字符串对象创建一块新的内存用于存放值。

1 String s1="0";//创建字符串对象的值并放入“字符串常量池”
2 String s2="0";//引用“字符串常量池”中的已有值
3 String s3=new String("0");//在内存堆上创建对象,存放值
4         
5 System.err.println(s1==s2);//指向同一个内存地址,返回true
6 System.out.println(s1.equals(s2));//内存地址中的值相同,返回true
7         
8 System.out.println(s1==s3);//指向两个不同的地址,返回false
9 System.out.println(s1.equals(s3));//两个不同地址中的值相同,返回true

6.针对重写equals方法的示例就不展开解释了。

posted on 2021-06-16 15:24  山儿87  阅读(22)  评论(0编辑  收藏  举报