zoukankan      html  css  js  c++  java
  • 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方法的示例就不展开解释了。

  • 相关阅读:
    uva 147 Dollars
    hdu 2069 Coin Change(完全背包)
    hdu 1708 Fibonacci String
    hdu 1568 Fibonacci
    hdu 1316 How Many Fibs?
    poj 1958 Strange Towers of Hanoi
    poj 3601Tower of Hanoi
    poj 3572 Hanoi Tower
    poj 1920 Towers of Hanoi
    筛选法——素数打表
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/14889560.html
Copyright © 2011-2022 走看看