今天第一次创建自己的博客,也是自己第一次开始正儿八经写博客文章,给自己定个小目标,以后每天都能有一篇博客上线,每天一篇小博文,两周一篇中型博文,一个月一篇大型博文,希望毕业之后能进阿里,好了直接进入正题。
之前有看过一些关于equals和==的比较的问题,但是自己没有做过总结总感觉记不住也理解不了,所以我认为最好的学习方法还是要自己总结一遍。想弄清楚这个问题,我认为需要分为基本数据类型和其他数据类型、类来看。
首先来看一下基本数据类型在这个问题中的表现,首先我们需要了解,”.”点运算符只能用于类的成员或者方法,所以基本的数据类型(逻辑型boolean,字符型char,整型byte,short,int,long,浮点型float,double)都不能使用.equals进行判断,此时只能使用“==”进行判断,此时“==”的意义只是数字上的和字符上的相等。
再来看看其他的数据类型在这个问题上的表现,其中最为代表性的就是String这个既不是基本的数据类型但是却非常频繁的被使用的这么一种数据结构,先对“==”进行测试,代码如下:

String sentence1 = "例句";
String sentence2 = "例句";
System.out.println(sentence1 == sentence2);//true
System.out.println(sentence1.equals(sentence2));//true

“==”和“.equals()”的情况一样其结果为true。其实这个时候我是很疑惑的,为什么他们的结果都是相同的呢?在java.lang.String的源码中,“.equals”方法是这样被定义的:

public boolean equals(Object anObject) {if (this == anObject) {return true;//如果调用.equals()方法中的参数是本身,则返回true}if (anObject instanceof String) {String anotherString = (String)anObject;//不太懂为什么这个地方要强制类型转换??int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

所以可以从源码中看到,实际上.equals是在进行值的分析(一个一个char进行比较)。而我推测“==”是专门用于地址的比较。我用了下面的代码进行证明

String sentence1 = new String("a");
String sentence2 = new String("a");
System.out.println(sentence1 == sentence2);//false
System.out.println(sentence1.equals(sentence2));//true
sentence1 = sentence2;//此时让两个例句的地址相等
System.out.println(sentence1 == sentence2);//true

这几天又遇到新的问题:既然String是这样,那Object又如何呢?
秉承着有源码看源码的思想,找到代码如下:

public boolean equals(Object obj) {return (this == obj);
}

在Object类的源码中,找到这样一行代码,this==obj,OMG难道可以这么偷懒的吗,所以我们也就知道了,在Object中的equals方法和String方法不同,Object中的equals方法是比较地址是否相同,我们用代码来验证一下:

Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.equals(o2));//false

我们先创建了两个“相同的”空对象,然后用.equals进行比较,结果是false,也证实了我们的猜想。
总结一下:.equals()用于判断值,==用于判断地址。

Java中相等的判断相关推荐

  1. Java中通过ActionEvent判断是哪个按钮

    Java中经常把一个ActionListener注册给多个按钮 如何判断这个ActioinListener是由哪个按钮触发的呢 可以用e.getSource()返回是哪个源触发了这个事件 转载于:ht ...

  2. go 判断元素是否在slice_在Java中如何高效判断数组中是否包含某个元素

    如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...

  3. java中isdirectory_Java isDirectory()判断目录是否为空

    Java isDirectory()判断目录是否为空 以下实例演示了使用 File 类的 file.isDirectory(),file.list() 和 file.getPath() 方法来判断目录 ...

  4. Java中多选题判断正确

    /*** 多选题判断正确* daArray:所填写的答案* answerArray:正确答案*/private boolean multipleExactly(String[] daArray, ch ...

  5. java判断整数是奇数还是偶数_没那么简单:Java中应该怎样判断一个整数是偶数还是奇数...

    环境:jdk 1.7. 一般用模2运算判断一个整数是偶数还是奇数.但是对于奇数,不能简单的用x%2==1来判断,原因如下: package hellojava; public class HelloJ ...

  6. Java中通过正则表达式判断是否为合法的url地址

    String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_| ...

  7. JAVA中判断两个字符串是否相等

    Java中判断字符串是否相等 相等判断操作符 == Java中, ==相等判断符用于判断基本数据类型和引用数据类型.当判断基本数据类型时,判断的是数值,当判断引用数据类型时,判断变量是否指向同一引用对 ...

  8. java中if语句的用法_Java中的if判断语句用法介绍

    在实际生活中经常需要做出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行.Java中有一种特殊的语句叫做选择语句,它也需要对一些条件做出判断 ...

  9. Java中判断字符串是否相等

    Java中判断字符串是否相等 相等判断操作符`==` 相等判断方法`equals()` `equals()`方法原理 总结 在最近的开发中,我踩到一个坑,过程是这样的.我需要在Java中判断两个字符串 ...

最新文章

  1. 自研芯片架构 ,这家中国公司发布DPU芯片计划
  2. tomcat8.0.15+spring4.1.2的集群下共享WebSocketSession?
  3. tensorflow tf.py_func
  4. 差分能量分析介绍(二)
  5. 高精度算法(加减乘除取模(均可以处理负数))
  6. 推你所想,神策智能推荐 Demo 上线(可免费体验)
  7. LT8920无线通讯程序
  8. 一键生成人脸像素图,还能上传到动森!这个项目很好玩
  9. 抽象类的成员特点 学习笔记
  10. 性能爆表缺软件?M1版MacBook真不能装Win10吗
  11. 用linux集成电路版图设计,集成电路版图设计项目化教程(第2版)
  12. UiPath Excel 向下填充
  13. iwconfig使用
  14. 数据库自定义聚合函数(求和、标准差、平均值、几何平均值、几何标准差、偏度系数、峰度系数)
  15. 计算机模拟水循环的过程,“SWAT主要作物水循环模拟方法详解”的学习及心得...
  16. JFlow:真心服务中国IT产业
  17. woff文件 服务器上找不到,字体文件未找到错误:IIS服务器上部署svg/woff/woff2字体 MIMe类型配置...
  18. 为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决
  19. java 抽奖系统_【小型系统】抽奖系统-使用Java Swing完成
  20. 个人搜集的工具类使用指导

热门文章

  1. java定义接口必用关键字_Java中定义接口的关键字是什么
  2. 使用markdown玩转代码架构设计
  3. 图片翻译怎么弄?如何把图片翻译成中文?
  4. python 遍历list获取元素的序号_Python列表(List)的三种遍历(序号和值)方法
  5. Python实现 文本词频统计(嵩天老师)
  6. ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the clas
  7. 我在美国与“狼”共舞的日子(6)
  8. andt-pro:搭建一个ant-design-pro项目(模板)
  9. PMP项目管理-[第十二章]采购管理
  10. Tableau基础操作——界面简介及功能介绍