关系操作符生成的是一个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. 关于mysql中存储json数据的读取问题

    在mysql中存储json数据,字段类型用text,java实体中用String接受. 返回前端时(我这里返回前端的是一个map),为了保证读取出的数据排序错乱问题,定义Map时要用LinkedHas ...

  2. h3c_7506e引擎主备镜像同步

    备份引擎的镜像文件不匹配会导致主引擎无法识别备引擎解决方法:1.备份主引擎上的启动文件同步到备引擎    ftp ip地址    get 在ftp服务器的镜像文件名 为其命名为本地文件(均为源文件名) ...

  3. Incjector

    网上的注入工具很多,大多也有比较详细的解释,但是大部分windows下的注入软件都是对自己软件的一种推荐,而且很多也不是非常的安全,对于有些破解版本来说,很可能自身会被带有木马,所以,Linux下的注 ...

  4. [工作积累] Google Play Services

    注意添加APP_ID <meta-data android:name="com.google.android.gms.games.APP_ID" android:value= ...

  5. shopex-百度爬虫抓取过于频繁导致php-cgi占用CPU过高的解决办法

    步骤 1.开启slowlog:php-fpm里修改配置 观察slowlog里的超时文件,然后修改相应超时文件 2.1修改完后,仍然无效,查看access.log,发现大量如下的请求 220.181.1 ...

  6. MicrosoftRootCertificateAuthority2011.cer 下载

    下载地址:https://files.cnblogs.com/files/hyh123/microsoft-root-certificate-authority.rar 在安装Microsoft .N ...

  7. mpt2sas0: log_info(0x31120100): originator(PL), code(0x12), sub_code(0x0100)及同类问题的追踪

    做存储或者磁盘阵列的经常会遇到linux kernel打印如下信息或者类似的信息,这是什么原因导致的呢? mpt2sas0: log_info(0x31120100): originator(PL), ...

  8. java练习-判断字符串是否都是数字

    方法1: package everyDayPratise; public class IsAllNumber { public static boolean method1(String s) { i ...

  9. C# .NET XML 序列化为对象,反序列化

    如果遇到:   根级别上的数据无效. 行 1,位置 1   .:即无法反序列化(反序列失败),得到对象为null ,把 xml 文本 Trim一下. xml=xml.Trim(); 序列化完毕你可以看 ...

  10. CentOS7用hostapd做radius服务器为WiFi提供802.1X企业认证

    CentOS7用hostapd做radius服务器为WiFi提供802.1X企业认证 来源: https://www.cnblogs.com/osnosn/p/10593297.html 来自osno ...