java中 == 与 equals()

java中的数据类型

  • 基本数据类型:byteshortcharintlongfloatdoubleboolean
  • 引用数据类型:数组接口
  • 基本数据类型和引用数据类型的区别
    • 基本数据类型:
      1. 变量名指向具体的值
      2. 声明后立刻分配内存空间
      3. 存储在栈中
      4. 使用 == 比较变量值是否相同
    • 引用数据类型:
      1. 变量名指向存储对象的内存地址
      2. 声明后分配的是内存地址,不分配内存(在new时,分配内存)
      3. 存储在堆中
      4. 使用 equals()比较变量值是否相同(使用 == 比较的时变量的内存地址是否相同)

equals()方法

在Object类中,equals()是这样定义的

public boolean equals(Object obj) {
    return (this == obj);
}

这个方法默认比较内存地址,在一些类(如StringIntegerDate )中进行了重写,使其不再是比较内存地址值内存中的值

以String为例

String str0 = "abc"; // 存放在String常量池
String str1 = new String("abc"); // 存放在堆中
System.out.println(str0 == str1); // false
System.out.println(str0.equals(str1)); // true

// intern()检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会 把"abc"添加到字符串池中,然后再返回它的引用
str1 = str1.intern();
System.out.println(str0 == str1); // true
System.out.println(str0.equals(str1)); // true

比较两个对象的值

public class Test{
	public static void main(String [] args){
		Student stu0 = new Student("张三", 13);
		Student stu1 = new Student("张三", 13);
        	System.out.println(stu0); // Student@161cd475(stu0指向的内存地址)
		System.out.println(stu1); // Student@532760d8(stu1指向的内存地址) 
		System.out.println(stu0 == stu1); // false 比较的是内存地址
		System.out.println(stu0.equals(stu1)); // true 比较对象的值
	}
}

// 学生类
public class Student {
	private String name;
	private int age;
	
	public Student() {}
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return this.name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return this.age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
		
	// 重写equals方法
	@Override
	public boolean equals(Object object) {
		// 内存地址相同,说明指向同一个实例
		if (this == object) {
			return false;
		}
		
		// object instanceof Student 判断object是否是Student的实例
		if (!(object instanceof Student)) {
			return false;
		}
		Student stu = (Student)object;
		return this.name.equals(stu.name) && this.age == stu.age;
	}
}
posted @ 2020-10-25 15:18  遥远的相似性  阅读(78)  评论(0)    收藏  举报