标签:java
在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。
标签:java
原文地址:http://blog.csdn.net/u013081425/article/details/39297063