Java面试 - == 和 equals 的区别?
==:如果比较的对象是基本数据类型,则比较的是数值是否一致;如果比较的是引用数据类型,则比较的是对象的地址值是否一致。
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 的区别?的更多相关文章
- java 的==和equals的区别(二)
java 的==和equals的区别 java 的==和equals的区别 ==通常表明引用的是同一个东西(引用的地址相同),equals通常表明两个对象的内容相同(值相同) ------------ ...
- Java 中 == 和 equals 的区别
有一段时间,== 和 equals 的区别一直困扰着我.因为涉及到Java的内存机制,然而Java的内存机制又是比较抽象的东西,所以对那时候的我来说,实在是很难理解. == 和 equals 最大的区 ...
- Java中“==”与equals的区别以及equals方法的重写
一.“==”与equals的区别: (1)==代表比较双方是否相同: 基本数据类型表示值相等. 引用数据类型表示地址相等,即同一个对象. (2)Object中的equals()方法:是否为同一个对象的 ...
- java 中 ==和equals 的区别
Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...
- Java中==与equals的区别及理解
区别: "==" 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致. 如果两个对象的引用相同时(指向同一对象时)," ...
- Java中==与equals()的区别
声明转载来源:http://blog.csdn.net/striverli/article/details/52997927 ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系 ...
- java 中 “==” 和 equals 的区别
转自https://www.cnblogs.com/www123----/p/7857298.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new Strin ...
- JAVA ==号和equals()的区别
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值: int x = 10; ...
随机推荐
- Java学习日记基础篇(八) —— 二进制、位运算、位移运算
二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...
- Linux下vim卡死原因
使用vim的时候,偶尔会碰到vim莫名其妙的僵在那里. 解决方案: 经查,原来Ctrl+S在Linux里是锁定屏幕的快捷键,如果要解锁,按下Ctrl+Q就可以了. 经验总结: 牢记这两个VIM组合键 ...
- wireshark新手导航
本篇教你如何开始使用Wireshark.开始本篇之前,请先已经安装完wireshark 3.0.0. 初始界面 启动wireshark,可以看到程序界面主要由以下几部分组成: 窗口标题-window ...
- RK3288 st7703 mipi屏指令过长,程序跑飞
本文为博主原创文章,转载请注明出处:https://www.cnblogs.com/lialong1st/p/11218433.html CPU:RK3288 系统:Android 5.1 调试 mi ...
- Redis Desktop Manager的下载及安装
一.下载Redis Desktop Manager 1. Redis Desktop Manager 的下载路径 (1)https://pan.baidu.com/s/1Jvr9MbgFn4UJh4M ...
- Java打印素数(质数)
要求:打印 2 - 100000 当中的素数与非素数.(素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数) 1. 常规方式——对正整数n,如果用2到 之间的所有整数去除,均无法整除,则 ...
- Android插件化(4):OpenAtlasの插件的卸载与更新
Android插件化(4):OpenAtlasの插件的卸载与更新 转 https://www.300168.com/yidong/show-2779.html 核心提示:如果看过我的前两篇博客An ...
- 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)
<?php //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1) function getip(){ if(!empty($_SERVE ...
- php实现手机定位功能的实例
最近在做通过定位手机用户,进行消息推送,经过分析最终做法如下 mobile.php文件 当用户当手机访问该页面时,通过实现页面表单隐藏封装自动提交获取手机浏览器经纬度并post给服务器 1 2 3 4 ...
- Qt编写自定义控件42-开关按钮
一.前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ.360卫士.金山毒霸等,都有很多开关控制一些操作,在Qt ...