关系操作符生成的是一个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

关于equals(),其实想一探究竟你结合方法的源码来看是最直接准确的;
因为很多类都对其进行重写以满足自己的业务需求。
下面重点介绍Integer型和String型
 /**
* 这个是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的比较方式的更多相关文章

  1. Servlet的生命周期+实现方式

    1.Servlet的生命周期:        (1)被创建:            默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法.                一个 ...

  2. Java实现多线程的三种方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.前两种方式启动的线程没有返回值 ...

  3. Java hashCode() 和 equals()的若干问题

    原文:http://www.cnblogs.com/skywang12345/p/3324958.html 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() ...

  4. Java hashCode() 和 equals()的若干问题解答

    本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...

  5. 程序员必须搞清的概念-equals和=和hashcode的区别

    1. 首先equals()和hashcode的介绍 equals 方法在非空对象引用上实现相等关系: * 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true. * 对称性:对于 ...

  6. Java中的hashCode() 和 equals()的若干问题解答

    一.hashCode()的作用 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int ...

  7. C# == 和 Equals

    先看一下解释 msdn对于 == 的解释: 对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false. 对于 string 以外的引用类型,如果两个操作数引 ...

  8. hashCode() 和equals() 区别和作用(转)

    出处:https://www.jianshu.com/p/5a7f5f786b75 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么 ...

  9. Java hashCode() 和 equals()的若干问题解答<转载自skywang12345>

    第1部分 equals() 的作用equals()的作用是用来判断两个对象是否相等.equals()定义在JDK的Object类中.通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否 ...

随机推荐

  1. CS萌新的汇编学习之路(其实是老师作业呵呵哒)Learning of Assembly Language

    第一节课学习汇编语言,做笔记,做笔记 1.概念 首先是汇编语言这门课程的定义以及对于学习高级语言.深入理解计算机系统的作用 软硬件接口机器语言 汇编语言 高级语言 关系 机器语言和汇编语言可移植性差 ...

  2. sqlserver数据库知识点总结(转)

  3. 原生JS实现选中的radio变为未选中

    需求如下,radio已经选中,再点击,取消选中状态. 效果如链接:演示地址 直接上代码: <!DOCTYPE html> <html> <head> <met ...

  4. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

  5. abaqus 帮助文档 Substructure(子结构) 理论

    对于静态问题,可以缩减到只保留Retain Node的刚度矩阵和载荷矩阵: 但对于动力问题,还需要增加内部节点作为retain node,但这样会有点麻烦,更为常用的方式是保留子结构的模态和振型.

  6. streamsets

    streamstes用户指南: https://streamsets.com/documentation/datacollector/latest/help/index.html#datacollec ...

  7. 通过excel创建表

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. listener.starting()源码探究

    容器启动时,监听器调用starting方法,本质是找到匹配的监听器,广播事件,开始监听 上节对寻找匹配监听器做了分析,其是这个过程比较重要的部分,本文开始监听,反而不是那么复杂,如下: 找匹配监听器就 ...

  9. 《剑指offer(第二版)》面试题60——n个骰子的点数

    一.题目描述 把n个骰子仍在地上,所有的骰子朝上的一面的点数之和为s,输入n,打印出s所有可能的值出现的概率. 二.题解 <剑指offer>上给出的两种方法,尤其是代码,晦涩难懂且没有注释 ...

  10. centos7虚拟机克隆后设置固定IP

    虚拟机centos7克隆一份出来之后,新centos7更改了固定IP,可是不生效.重启网卡时报错: network.service: control process exited, code=exit ...