首页 > 代码库 > 关于 == 和 equals

关于 == 和 equals

在java中,equals方法是继承自object类。它与==不一样。

==用来比较两个名称是否参考自同一个对象,equals方法用来比较两个名称对应的内容是否相同。

例如:

import java.io.*;
import java.util.Scanner;
import java.math.*;
import java.lang.*;

public class Main10 {
	public static void main(String[] args) {
		String a = "Hello";
		String b = "Hello";
		System.out.println("a == b?" + " " + (a == b));
		System.out.println("a == b?" + " " + a.equals(b));
		Integer c = 3;
		Integer d = 3;
		System.out.println("c == d?" + " " + (c == d));
		System.out.println("c == d?" + " " + c.equals(d));
	}
}


执行结果为:

a == b? true
a == b? true
c == d? true
c == d? true


这是因为a和b,c和d参考的是同一个对象,它们指向的是同一段内存。对于String类,维护一个String Pool,对于一些可以共享的字符串对象,会先在String Pool中查找是否存在相同的String内容(字符相同),如果有旧直接传回,而不是直接创建一个新对象,以减少内存的消耗。所以对于==,a和b参考的是一个对象,都是“Hello”这个字符串。对于equals方法,a和b,c和d的内容是一样的,所以也是true。


import java.io.*;
import java.util.Scanner;
import java.math.*;
import java.lang.*;

public class Main10 {
	public static void main(String[] args) {
		String a = new String ("Hello");
		String b = new String ("Hello");
		System.out.println("a == b?" + " " + (a == b));
		System.out.println("a == b?" + " " + a.equals(b));
		Integer c = new Integer(1);
		Integer d = new Integer(1);
		System.out.println("c == d?" + " " + (c == d));
		System.out.println("c == d?" + " " + c.equals(d));
	}
}

执行结果为:

a == b? false
a == b? true
c == d? false
c == d? true


在==的时候都输出false,这是因为他们不再参考同一个变量,a,b对应的是new出的两个不同的对象,同理c,d也是。

但是它们的内容还是一样的,所以equals方法中都输出true。




关于 == 和 equals