java细节篇(==和equals的区别)
1)当==两边是对象时(String,Integer...),两边比的都是地址
2)当==两边是基本类型时(int,float),两边比的都是值
3)默认equals比的是对象的地址,但是重写的话可以改变成比较值,String和Integer的equals就是重写过的
废话少说,Run!!!
package test;
public class Test {
public static void main(String[] args) {
System.out.println("###############对象时比的都是地址################");
TestObj t = new TestObj();
TestObj t2 = new TestObj();
System.out.println(t==t2);//false
System.out.println(t.equals(t2));//false
System.out.println("############基本类型[==]比的是值###########");
int a=1;
float b=1f;
System.out.println(a==b);//true
// System.out.println(a.equals(b)); 写法错误
System.out.println("##########Integer特殊(equals重写成比较值,但new时==还是比较地址)##########");
Integer i1=0;
Integer i2=0;
System.out.println(i1==i2);//true
System.out.println(i1.equals(i2));//true
Integer i3 = new Integer(0);
Integer i4 = new Integer(0);
System.out.println(i3==i4);//false
System.out.println(i3.equals(i4));//true
System.out.println(i1==i3);//false
System.out.println(i1.equals(i3));//true
System.out.println(i4.equals(i2));//true
int i5 = 0;
System.out.println(i1.equals(i5));//true 和基本int类型比是比值
System.out.println(i1==i5);//true 和基本int类型比也是比值
System.out.println(i3.equals(i5));//true new的和基本int类型比是比值
System.out.println(i3==i5);//true new的和基本int类型比也是比值
float f6 = 0f;//等同f6=0;
System.out.println(i1.equals(f6));//false 注意结果不同说明equals的重写只是对int类型时是比值
System.out.println(i1==f6);//true
System.out.println(i3.equals(f6));//false 注意结果不同说明equals的重写只是对int类型时是比值
System.out.println(i3==f6);//true
System.out.println("=======String特殊=======");
String s1="a";
String s2="a";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3 = new String("a");
String s4 = new String("a");
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
System.out.println(s1==s3);
System.out.println(s1.equals(s3));
System.out.println(s4.equals(s2));
}
}
对于Integer为什么只会对int作值的比较,查看源代码可见:
/**
* Compares this object to the specified object. The result is
* {@code true} if and only if the argument is not
* {@code null} and is an {@code Integer} object that
* contains the same {@code int} value as this object.
*
* @param obj the object to compare with.
* @return {@code true} if the objects are the same;
* {@code false} otherwise.
*/
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
java细节篇(==和equals的区别)的更多相关文章
- java中的==和equals的区别
关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...
- java中hashcode和equals的区别和联系
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
- 【java基础】 == 和 equals() 的区别
==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型(指的值类型)时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值: int x ...
- 【java基础 15】java代码中“==”和equals的区别
导读:昨夜闲来无事,和贾姑娘聊了聊java基础,然后就说到了这个"=="和equals的问题,我俩都是以前了解过,也常用这个,但是,昨天说到的时候,又乱了,什么比较地址值,什么判断 ...
- java提高篇(十三)-----equals()方法总结
equals() 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boolean equals(Object obj) { retu ...
- java中等于和equals的区别
面试的时候没答上,很受打击,特写在这里. ==是判断两个变量或实例是不是指向同一个内存空间equals是判断两个变量或实例所指向的内存空间的值是不是相同 除了String和封装器,equals()和“ ...
- Java 面试题 == 和 equals 的区别
int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引 ...
- java对象比较==和equals的区别
转载:http://blog.csdn.net/bluesky_usc/article/details/51849125 1值比较 即内容相同,我们就认为是相等的.比如:int i=5:int j = ...
- Java细节----method和function的区别
面向对象的语言叫方法 面向过程的语言叫函数 在java中没有函数这么一说,只有方法一说.属于概念上的区别. 硬要说区别. Method必须依赖于Object. Function 是独立的,不需要依赖于 ...
随机推荐
- 问题 B: 矩形类中运算符重载【C++】
题目描述 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩 ...
- Python-三元运算符和lambda表达式
一.三元运算符 #当满足条件1时,res=值1:否则res=值2 res = 值1 if 条件1 else 值2 举例说明: res=10 #简单的if else语句 if abs(res)>0 ...
- 第13章 GPIO-位带操作—零死角玩转STM32-F429系列
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- 9、SpringBoot+Mybatis整合------动态sql
开发工具:STS 前言: mybatis框架中最具特色的便是sql语句中的自定义,而动态sql的使用又使整个框架更加灵活. 动态sql中的语法: where标签 if标签 trim标签 set标签 s ...
- Data Warehouse 业务系统不入仓表
根据数据仓库的实施经验,凡符合如下特征的表,建议不入仓. ① 备份数据表 此类表是对现有表中某个时点数据的一份拷贝,根据需要进行数据恢复使用.因此,只需取当前表中的数据即可. ② 冗余数据表 同一类数 ...
- gd库 给底图写入文字问题
png-8的图片 设置颜色会返回false,换成png-24的就可以了
- dataTables设置下拉滚动出现表头挤在一起的解决方法
1.引入datatable的CSS文件 <link href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.min. ...
- Cluster - HA -keepalived
学习须知 VRRP:https://www.cnblogs.com/aftree/p/9376427.html 需求 集群中,对后端RealServer的状态做检测,实现自动化问题检测和问题自动处理机 ...
- 开发工具cfree安装报错解决
报错如下: [ --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW-------------------- 检查文件依赖性... 正在编译 ...
- OSI七层模型 学习摘要
OSI参考模型是计算机网路体系结构发展的产物.它的基本内容是开放系统通信功能的分层结构.这个模型把开放系统的通信功能划分为七个层次,从邻接物理媒体的层次开始,分别赋于1,2,……7层的顺序编号,相应地 ...