关于 == 和 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。

时间: 2024-10-10 23:57:22

关于 == 和 equals的相关文章

equals方法的使用

对于字符串来说,使用"=="运算符和"equals()"方法来比较,其比较方式不同.==运算符用于比较两个变量本身的值,即两个对象在内存中的首地址:equals()方法比较的是两个字符串中所包含的内容是否相同.对于非字符串类型的变量来说,==运算符和equals()方法都是用来比较所指对象在堆内存中的首地址,即比较两个类类型的变量是否指向同一个对象. 例 class Test { int x=1; } public class ep3_1{ public stati

浅谈Java中的equals和==(转载)

在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就

Java的equals()和==的区别

Java中==就是用来比较值是否相等,equals()是父类Object提供的一个方法equals(Object obj),在Java API文档中提到: The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this met

Object.equals() 方法

Object.equals() 方法: 1 public class EqualsTest1 { 2 public static void main(String[] args) { 3 //Cat c1 = new Cat(); 4 //Cat c2 = new Cat(); 5 //System.out.println(c1 == c2);//result:false 6 Cat c3 = new Cat(1,2,3); 7 Cat c4 = new Cat(1,2,3);//在重写equa

Java学习之equals和hashcode的关系

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同.Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同:(2)如果两个对象的hashCode相同,它们并不一定相同.当然,你未必要按照要求去做,但是如果你违背了上述原则就会

hashcode和equals

在java中,万物皆对象,所有的对象都继承于Object类,Object类有两个方法equals和hashCode.equals一般用来比较两个对象的内容是否相等,而hashCode一般用来提高容器的查询效率. public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } equals在没有重写的情况下和==是一样的,对于值类型,比较的是值,对于引用类型则比较的是对象的首地址.

重写equals和hashCode方法的示例

如果一个类有自己特有的"逻辑相等",且需要以此进行比较时,那么就需要重写equals方法. 在Object的规范中,重写equals方法有下面几条通用约定: 自反性. x.equals(x) == true 对称性.if   y.equals(x) == true , then  x.equals(y) == true 传递性.if   x.equals(y) == true y.equals(x) == true , then x.equals(z) == true 一致性.如果比较

java之"equals"和"=="的区别

java中的数据类型有基本数据类型和引用数据类型. 基本数据类型包括:int,char,float,long,double,boolean,byte,short(注:String不是基本数据类型):基本数据类型之间的比较用"==". 引用数据类型包括:Integer,Char,Float,Long,Double,Boolean,Byte,Short.引用数据类型"=="比较的是他们在内存中的存放地址,equals比较的是值是否相等. 对于String和Integer

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru