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

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. 查找 Linux 发行版名称、版本和内核详细信息

    作者: Sk 译者: LCTT geekpi | 2019-08-26 11:40   收藏: 1 本指南介绍了如何查找 Linux 发行版名称.版本和内核详细信息.如果你的 Linux 系统有 GU ...

  2. C++类中静态数据成员MAP如何初始化

    conv_xxx.hpp class convolution { ... ... typedef std::map<int, std::string> ConvDtMap; static ...

  3. CSPS2019游(tuifei)记

    %%%脸哥没脸%%% Day0,日常考前紧张,做不下题去.听各大主任送祝福(从里红(wa)到外) 然后就出发了,大巴上和云力一起坐,吃了好多东西.中午因不满火车站的不合理收费,选择了面包+火腿 下午在 ...

  4. 分治FFT学习笔记

    用途 在\(O(n\log^2 n)\)的时间内做诸如 \[ f_n=\sum_{i=0}^{n-1} f_ig_{n-i} \] 或是 \[ f_n=\sum_{i=0}^{n-1} f_if_{n ...

  5. 用python实现不同格式99乘法表输出

    前言:学习python已经有一段时间了,最近发现有时候会出现一个东西知道,也能写出来,但是说不出来的情况.思考后觉得是基础还不够扎实,只一味写代码,没有深入思考具体实现的逻辑,以及各个点之间的关联.所 ...

  6. ORACLE批量导入图片到BLOB字段

    要插入图片的表不是固定的,而且是批量插入很多张,还要考虑到因为图片的文件名错误,修改后要再次插入,此时应避免已经插入的重复执行操作, 浪费时间. 所以就选择先用一张临时表来暂时保存从文件系统读取的照片 ...

  7. 重启hdfs集群的时候,报大量的gc问题。

    问题现象: 2019-03-11 12:30:52,174 INFO org.apache.hadoop.util.JvmPauseMonitor: Detected pause in JVM or ...

  8. chtMultiRegionSimpleFoam求解器的热源不在边界上【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/126777-chtmultiregionsimplefoa ...

  9. 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础

    1.实践过程记录 1.字符串型注入. 2.整数型注入 3.注入语句查看其他内容 4.xss是一种漏洞,这种漏洞允许用户输入脚本并且浏览器提交的时候不加编码.这种东西是最为流行并且有害的web应用的问题 ...

  10. GitHub回退到某个commit版本

    首先查看commit日志 git log 复制你想回退到的commit版本的commit_id,也就是图中圈出来的一大串字符. 将本地回退 git reset --hard commit_id 将远程 ...