Java中== 与 equals 区别用法

判断两个变量是否相等有两种方式:

  • 一种是利用 == 运算符;
  • 一种是利用equals方法。

用处:

① 比较java基本类型:

比较基本类型只能用"= =",不能用"equals",这里的"=="比较的是两个基本类型的

② 比较包装类:

这里拿Integer,Character 来举例

public static void main(String[] args) {
		Character a = new Character('a');
        Character b = new Character('a');
        
        //a与b值相同、但是地址不同
        System.out.println(a == b); //false
        System.out.println(a.equals(b));//true
        
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
        
        //i1与i2值相同、但是地址不同
        System.out.println(i1 == i2);//false
        System.out.println(i1.equals(i2));//true

	}

结果:
在这里插入图片描述
这边"=="比较的是对象的内存地址,new了两个不同的对象所存放的地址是不一样的,这边的"equals"比较的就是值,这里为什么比较的是值呢,包装类里的重写了equals的方法。

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

注:
但是要注意对于整型的包装类(Integer Long 等,通过Integer a = 127,Integer b = 127创建时,127保存在常量区编译时创建,使用==判断a与bs时返回true;但当定义数值不在(-128~127)之间的话 定义时会在堆中创建对象,此时a= =b,返回false!

用Integer举例说明:

public static void main(String[] args) {
		Integer a = 127;
		Integer b = 127;
		System.out.println(a==b);//true
		
		Integer c = 128;
		Integer d = 128;
		System.out.println(c==d);//false
	}

结果:
在这里插入图片描述
③ 比较String:

"=="比较的是内存地址,"equals"比较的是值;

 public static void main(String[] args) {
	String a = new String("aa");
	String b = new String("aa");
    
    //a与b值相同、但是指向地址不同
    System.out.println(a == b); //false
    System.out.println(a.equals(b));//true
    
    String i1 = "aa";
    String i2 = "aa";
    
    //i1与i2值相同、指向地址也相同
    System.out.println(i1 == i2);//true
    System.out.println(i1.equals(i2));//true
    
    //i1与a值相同、指向指向地址不同
    System.out.println(i1 == a);//false
    System.out.println(i1.equals(a));//true
}

结果:  
在这里插入图片描述
④ 比较对象:

这里"=="比较的是内存地址,"equals"比较的也是地址,没有重写equals方法的类都是调用的Object的equals的方法。

 Person p1 = new Person(1001, "kangknag");
 Person p2 = new Person(1001, "kangknag");
 
 System.out.println(p1 == p2);//f
 System.out.println(p1.equals(p2));

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43896747/article/details/85106164
今日推荐