==和equals的比较方式
关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。——摘自《Java编程思想》
多读几遍之后你会发现——这不就是句废话么233333.(开个玩笑不要打我)
先说 == (等于关系操作符)
当你在使用这个关系操作符的时候要注意等号的两边分别是什么
1.同种基本数据类型的比较:
这个相信大家都知道,就是值的比较,相等就true,不等就false
2.同种类型对象与对象之间比较
Integer a =new Integer(100);
Integer b =new Integer(100);
System.out.println(a==b);
输出结果自然是false,这里比较的是a,b在内存中的地址,而这两个对象的地址自然是不同的
说到这里忍不住提一笔(int 这个数据类型有个小特例),看下面代码
Integer a =200;
Integer b =200;
Integer c =100;
Integer d =100;
System.out.println(a==b);
System.out.println(c==d);
这个输出的是false true 原因嘛看一下源码就了解了
public static Integer valueOf(int i) { //当你输入的int值不在他规定的区间里面时,他就重新new一个对象
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
3.引用数据类型和基本数据类型比较的时候它会将引用类型拆箱操作,进行值的比较。
int a =200;
Integer b =new Integer(200);
System.out.println(a==b);
结果是true
下介绍equals
/**
* 这个是jdk1.7 Integer 里面重写的equals方法
*
*/ public boolean equals(Object paramObject) {
if (paramObject instanceof Integer) // 如果你传的参数不是integer,直接返回false,
//当然如果是int型它会自动装箱成integer
return (this.value == ((Integer) paramObject).intValue());
return false; //如果是integer型的,那就很好,直接都转成int型用==比较数值返回相应的true/false
}
/*
* 这个是jdk1.7 String里面equals重写方法
*/ public boolean equals(Object paramObject) {
if (this == paramObject)//如果你传的是同一个对象,这里比较的是对象
return true; //既然都是同一个了,自然是true;
if (paramObject instanceof String) {//这里就是与上面一样判断是不是同一类型,不是就返回false;
String str = (String) paramObject; //将传入参数的值给Str,将str分解成单个的char型数据进行单个比较,全相等就是true
int i = this.value.length;
if (i == str.value.length) {
char[] arrayOfChar1 = this.value;
char[] arrayOfChar2 = str.value;
for (int j = 0; i-- != 0; ++j)
if (arrayOfChar1[j] != arrayOfChar2[j])
return false;
return true;
}
}
return false;
}
结论就是值的比较,当然前提是你比较的是同种类型的数据(仅这里把int和integer这样的看做一种);
转自——这么烂肯定自己写的
==和equals的比较方式的更多相关文章
- Servlet的生命周期+实现方式
1.Servlet的生命周期: (1)被创建: 默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. 一个 ...
- Java实现多线程的三种方式
Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.前两种方式启动的线程没有返回值 ...
- Java hashCode() 和 equals()的若干问题
原文:http://www.cnblogs.com/skywang12345/p/3324958.html 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() ...
- Java hashCode() 和 equals()的若干问题解答
本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...
- 程序员必须搞清的概念-equals和=和hashcode的区别
1. 首先equals()和hashcode的介绍 equals 方法在非空对象引用上实现相等关系: * 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true. * 对称性:对于 ...
- Java中的hashCode() 和 equals()的若干问题解答
一.hashCode()的作用 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int ...
- C# == 和 Equals
先看一下解释 msdn对于 == 的解释: 对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false. 对于 string 以外的引用类型,如果两个操作数引 ...
- hashCode() 和equals() 区别和作用(转)
出处:https://www.jianshu.com/p/5a7f5f786b75 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么 ...
- Java hashCode() 和 equals()的若干问题解答<转载自skywang12345>
第1部分 equals() 的作用equals()的作用是用来判断两个对象是否相等.equals()定义在JDK的Object类中.通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否 ...
随机推荐
- 使用feign出现 java.lang.IllegalStateException: Service id not legal hostname
检查spring. application.name是否使用了_
- 常用的HTML模板(转载)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 利用类的反射导入excel示例
直接上代码 1.页面展示 <div class="panel-heading font-bold text-center"> <i class="fa ...
- 05-树8 File Transfer (25 分)
We have a network of computers and a list of bi-directional connections. Each of these connections a ...
- Devexpress gridview cell增加控件
1.根据上图次序,先添加三类控件类型: 2.根据上图次序设置columnEdit 3.点开ColumnEdit , 设置 check 和 uncheck的 value
- linux的使用以及linux服务器应用的部署
一.Linux(rehat.centos.ubuntu...)基础知识 上午: putty软件连接linux服务器: [root @ foundation2 ~ ] # 用户名 ...
- Visual Studio Code Java输出中文乱码的问题
Visual Studio Code 推出了java插件,最近适用了一把,非常不错,但是有个很明显的bug.就是中文乱码,具体现象有如下: 1.System.out.println 控制台输出乱码. ...
- 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中
转载自:http://blog.csdn.net/erfucun/article/details/52312682 本博文主要内容包括: 技术实现foreachRDD与foreachPartition ...
- update_engine-DownloadAction(一)
通过update_engine-整体结构(一),(二),(三)对update_engine整体的运行机制有了一定的认识之后.开始逐个分析重要的Action.先从DownloadAction开始分析. ...
- Qt控制流简析
前言: Qt库及其绑定python语言的PySide库.PyQt库在圈中已经是TD的标配了,Qt提供了多种快速绘制图形窗口的方式.但正是因为这个原因,导致很多TD局限在设计窗口外观的桎梏中,而忽略了Q ...