equals和==区别

2019-03-10 11:55:59来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

原文链接:https://www.cnblogs.com/army-code/p/10497662.html
 
1>==比较
  I.对于基础数据类型(byte,short,int,long,float,double,boolean,char)比较时,使用==,比较的是数值大小(栈中的数据共享)
  基础数据类型在内存的存储:都是存储在栈中(栈中的数据共享)
1 public void method(){
2      int a=2;
3      int b=2;
4      a=3
5 }

  执行第2行:在栈创建a的引用,然后查找栈中是否存在2的地址,没有开辟一个存储2的地址

  执行第3行:在栈创建a的引用,然后查找栈中是否存在2的地址,有,直接把地址赋予b

  执行第4行:查找栈中是否存在3的地址,没有开辟一个存储3的地址
 
 
  II.对于引用数据类型,比较的是引用内存地址,即同一个对象,无论如何改变对象里面的值,比较的结果都为true,除非新new一个对象为false
 
2>equals比较
  原始equals和==是相同的,我们通过object的equals可以看出
   public boolean equals(Object obj) { return (this == obj); } 
  都是比较的内存地址
 
  有些对象对equals进行重新(java.lang.String,java.util.Date),例如String的equals方法:
  
 1 public boolean equals(Object anObject) {
 2     if (this == anObject) {
 3         return true;
 4     }
 5     if (anObject instanceof String) {
 6         String anotherString = (String)anObject;
 7         int n = value.length;
 8         if (n == anotherString.value.length) {
 9             char v1[] = value;
10             char v2[] = anotherString.value;
11             int i = 0;
12             while (n-- != 0) {
13                 if (v1[i] != v2[i])
14                     return false;
15                 i++;
16             }
17             return true;
18         }
19     }
20     return false;
21 }

  先对内存地址比较,不相等,再对string对象中的value进行比价

 
注意:
  String s1=“asd” 和 String s2 = new String(“asd”);的区别
  String s1=“asd” 在栈内存中开辟一个空间,存储s1的引用,然后从栈中查找”asd”值,如果存在直接返回地址,不存在,开辟空间创建”asd”并返回起始地址给s1
  String s2 = new String(“asd”);和普通对象初始化一样,在栈中开辟s2的引用空间,在堆中存储”asd”
  所以:
String s1=“asd”;
String s2=“asd”;
System.out.printl(s1==s2);  //输出true

String s1 = new String(“asd”);
String s2=“asd”
System.out.printl(s1==s2); //输出false 

 


原文链接:https://www.cnblogs.com/army-code/p/10497662.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:springboot 2.0.8 跳转html页面

下一篇:SpringCloud之初识Feign ----- 分布式负载自动拼接请求的URL