==:如果比较的对象是基本数据类型,则比较的是数值是否一致;如果比较的是引用数据类型,则比较的是对象的地址值是否一致。

equals():equals()方法不能用于比较基本数据类型的对象,如果对象和自身进行比较,则equals()方法与==是一样的。对于String类 Date类 File类等 可重写equals() 方法用于比较对象的属性内容是否一致。

举例

如果a,b 是基本类型,那么== 运算符比较的是什么呢?

public class Demo {
private static int a = 100;
private static int b = 100;
public static void main(String[] args) {
if(a == b){
System.out.print("因为a,b是基本类型,所以此时比较的是a, b 的值");
}
}
}

运行Debug模式,测试一下



由此可知,当a,b是基本类型,那么== 运算符比较的就是基本类型的值。

如果a,b 是引用类型, 那么== 运算符比较的还是a,b 的值吗?

public class Demo {

  private static String a = "china";
private static String b = "china"; public static void main(String[] args) {
if(a == b){
System.out.print("因为a, b是引用类型, 所以此时比较的是对象a, b的地址值");
}
}
}

运行Debug模式,测试一下



由此可知,当a,b是引用类型,那么== 运算符比较的就是引用类型的对象地址值。

如果a,b 是引用类型,那么equals()方法比较的是什么呢?

public class Demo {

  private static String a = "china";
private static String b = "china"; public static void main(String[] args) {
if(a.equals(b)){
System.out.print("因为a, b是引用类型, 所以此时比较的是对象a, b的地址值");
}
}
}

运行Debug模式,测试一下



由此可知,默认情况下,equals()方法比较的是对象与自身是否一致。当对象与自身一致时,equals()方法与== 是一样的。

如果重写equals()方法,是否可以比较对象的内容呢?

class Pig {
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
// 重写equals()方法, 用于比较对象的属性内容是否一致
public boolean equals(Object anObject) {
// 判断对象与自身是否一致
if (this == anObject) {
return true;
}
// 判断anObject与String是否为同类或存在继承关系
if (anObject instanceof String) {
return true;
}
//判断是同一类或者子父类关系,则将Object类型强转为Pig
Pig pig = (Pig)anObject;
// 比较pig的属性name的内容是否一致
if(this.name == pig.name && this.name.equals(pig.name)) {
return true;
}else {
return false;
}
}
}

运行Debug模式,测试一下



由此可知,重写equals()方法,equals()方法是可以比较对象属性内容是否一致的。

Java面试 - == 和 equals 的区别?的更多相关文章

  1. java 的==和equals的区别(二)

    java 的==和equals的区别 java 的==和equals的区别 ==通常表明引用的是同一个东西(引用的地址相同),equals通常表明两个对象的内容相同(值相同) ------------ ...

  2. Java 中 == 和 equals 的区别

    有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...

  3. Java中“==”与equals的区别以及equals方法的重写

    一.“==”与equals的区别: (1)==代表比较双方是否相同: 基本数据类型表示值相等. 引用数据类型表示地址相等,即同一个对象. (2)Object中的equals()方法:是否为同一个对象的 ...

  4. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

  5. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

  6. Java中==与equals的区别及理解

    区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...

  7. Java中==与equals()的区别

    声明转载来源:http://blog.csdn.net/striverli/article/details/52997927 ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系 ...

  8. java 中 “==” 和 equals 的区别

    转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...

  9. JAVA ==号和equals()的区别

    ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值: int x = 10; ...

随机推荐

  1. laravel-china 镜像停止服务

    php 的很多开发都会用到composer.然后国内的镜像又慢,很多人会选择用laravel-china的镜像. 之前一直用的很好.今天突然发现不能composer update.出现报错.WTF!! ...

  2. ssh免密码登录与常见问题

    免密码登录 cd ~/.ssh ssh-keygen -t rsa #然后敲回车 mv id_rsa.pub master_rsa.pub cat master_rsa.pub >> au ...

  3. PHP开发高可用高安全App后端☆

    第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章本章主要讲解课程的一些准备工作知识.包括工具.环境.模板等. ...

  4. (转)supervisor

    转载:https://www.cnblogs.com/zhoujinyi/p/6073705.html 进程管理supervisor的简单说明 背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被 ...

  5. NPM私有包部署到私有仓库

    NPM私有包部署到私有仓库1.项目部署到NPM2.私有仓库的搭建1,项目部署到NPM注册NPM账号注册地址:https://www.npmjs.com/ 注册完成后进入邮箱验证 账号登录 npm lo ...

  6. 学习OpenCV双目测距原理及常见问题解答

    学习OpenCV双目测距原理及常见问题解答 转自博客:https://blog.csdn.net/angle_cal/article/details/50800775 一. 整体思路和问题转化.  图 ...

  7. start、就绪、运行状态的demo演示

    1.start状态: package com.roocon.thread.t1; public class NewThread implements Runnable { @Override publ ...

  8. TCP HTTP SOCKET之间的有什么关系

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  9. RT-Thread 柿饼GUI

    目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon.TouchGFX和emWin是最受人瞩目的.   RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT ...

  10. 2019-8-15C#MDI窗体实现多窗口效果

    C#MDI窗体实现多窗口效果  Visual C#是微软公司推出的下一代主流程序开发语言,他也是一种功能十分强大的程序设计语言,正在受到越来越多的编程人员的喜欢.在Visual C#中,提供了为实现M ...