`
v5browser
  • 浏览: 1137638 次
社区版块
存档分类
最新评论

面试题解析:3 java中 == 和 equals的区别

 
阅读更多

==:

1.如果比较的是两个普通的变量,那么 比较的是两个变量的值是否相等。

		int a = 3 ; 
		int b = 3 ;
		System.out.println(a == b);

2.如果是对象类型的变量,那么比较的是两个对象变量中存的引用的地址是否相同,显然 obj1 和 obj2 指向的对象不是同一个对象。

		Object obj1 = new Object();
		Object obj2 = new Object();

equals:首先这是一个方法,这个方法定义在Object对象里,java中的每个类都直接或者间接的集成自Object类,而在Object中,equals()的方法实现如下:

    public boolean equals(Object obj) {
        return (this == obj);
    }
所以我们分析就可以知道,如果我们自己定义的类,没有重写equals方法,那么 调用equals 和 使用 == 对两个对象变量进行比较的结果是相同的。

1.用于比较String常量是否相等,因为String对象对equals方法重写了,所以,当我们要比较两个字符值是否相等时,建议使用equals方法。

示例:

		String s1 = new String("abc");
		String s2 = "abc";
//		打印结果:false
		System.out.println(s1 == s2);
//		打印结果:true
		System.out.println(s1.equals(s2));

2.对于自定义的对象,如果我们希望通过几个变量来判断这两个对象是否是同一个对象,那么我们需要重写equals和hashCode方法,然后调用equals方法

例如:我们认为,如果两个对象的age 和 name 相同 那么这两个对象就相同。

示例:

Person.java

class Person
 {
	 private int age;
	 private String name;
	public Person(int age, String name) {
		this.age = age;
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
 }

使用测试:

/** 
 * @author strungle  E-mail: 645707787@QQ.com
 * @version 创建时间:2013-6-12 下午7:20:06 
 * 
 */
public class Page11Number11 {

	public static void main(String[] args) {
		Person p1 = new Person(1,"zhangsan");
		Person p2 = new Person(1,"zhangsan");
//		打印结果:false
		System.out.println(p1 == p2);
//		打印结果:true
		System.out.println(p1.equals(p2));

	}
}

并且请大家注意,重写equals方法的时候也要重写对应hashCode方法,为什么呢?因为api中Object对象的equals方法的描述如下:

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes. (

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

)


分享到:
评论

相关推荐

    Java实例高难度面试题及解析 - 展现你的编程实力!

    本篇文章提供了20道高难度的Java实例面试题及详细解析,旨在帮助开发者展示出卓越的编程实力。在面试中,Java实例是考察面试者对面向对象编程和Java语言特性的理解能力的重要方面。通过这些高难度问题,您将全面掌握...

    java面试题大全(2012版)

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java Object 类高难度进阶版面试题集锦解析Java Object类高难度面试题及答案解析

    提供了20道高难度的Java Object类面试题及详细答案解析,涵盖了equals()、hashCode()、toString()、clone()、finalize()等方法的重写和应用,以及对象的比较、克隆、标识哈希码等概念。适合准备Java面试的开发者深入...

    java 面试题 总结

    3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean...

    Java面试宝典-经典

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试宝典2010版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    180多页面试题,前前后后不间断的更新了两年,准备换工作时,总是拿来看看,有比较好的面试题,也不间断的更新,面试题目录如下: 【基础】面向对象的特征有哪些方面 13 抽象 13 继承 13 封装 13 多态性 13 【基础】...

    java面试宝典2012

    各种java面试题集,面试前必备哦, 1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套...

    最新Java面试宝典pdf版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    java面试宝典

    java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 ...

    Java面试宝典2012新版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试笔试资料大全

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    JAVA面试宝典2010

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    java经典面试2010集锦100题(不看你后悔)

    B) 在Java中布尔类型不能和数字之间不能来回转换,即false和true不对应任何零或非零的值。 C) 双精度类型double比单精度类型float具有更高的精度和更大的表示范围,但float类型具有速度快、占用内存小的优点。 D) 在...

    Java面试宝典2012版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 ...

Global site tag (gtag.js) - Google Analytics