• java语言中“==”和“equals”方法的区别


    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方法的示例就不展开解释了。

  • 相关阅读:
    android动画坐标定义
    Android animation 动画背景图自动播放的实现
    松开手,你可以拥有更多
    Serializable继承和用途
    程序员必备的国外IT网站
    android 解析json数据格式
    免费的天气预报API谷歌,雅虎,中央气象台
    关于Lockfree Hash Table的一些链接资料
    字符串匹配算法之Brute force algorithm
    java 处理高精度计算
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/14889560.html
Copyright © 2020-2023  润新知