在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。
时间: 2024-10-10 23:57:22