1.Java中有两种判断相等的方法:

1.1首先是==运算符

对于基本类型而言,==运算符比较的是值是否相等(本质也是比较的地址,因为常量在常量池中的地址不可改变)

int a = 3;

int b = 3;

System.out.println(a==b);//结果为true

对于引用类型而言,==运算符比较的是变量是否指向同一引用对象(以String为例);

String str1 = "abc";

String str2 = "abc";

System.out.pritnln(str1 ==str2);//结果为false,因为str1和str2所指的地址不同。

2.2 equals()方法

首先先来看一下Object源码,只有一行代码  this==obj;

public boolean equals(Object obj) {

return (this == obj);

}

所以对于Object类而言equals()方法所比较的也是地址,如下所示:

Object o1 = new Object();

Object o2 = new Object();

System.out.println(o1.equals(o2));//结果为false,因为o1和o2所指的是两个对象。

但是我们来看一下String类,它继承了Object类中equals()方法,但却重写了equals()方法,它首先和自己本身作比较,若相等则  返回true,然后在判断它是否属于String类型,若是,则依次比较字符串每个位置上的字符是否相等。

public boolean equals(Object anObject) {

if (this == anObject) {

return 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;

}

所以对于String类型来说,equals()方法比较的是内容是否相等,如下

String str1 = "abc";

String str2 = "abd";

System.out.println(str1.equals(str2));//false;

String str3 = "abc";

System.out.println(str1.equals(str3));//true;

对于String来说,还有一种方法可以比较大小就是compareTo(),该方法的返回值是int类型。源码如下(有注释)

public int compareTo(String anotherString) {

int len1 = value.length; //当前String对象的长度

int len2 = anotherString.value.length; //anotherString对象的长度

int lim = Math.min(len1, len2); //取两者最小的长度

char v1[] = value;

char v2[] = anotherString.value;

int k = 0;

while (k < lim) {

char c1 = v1[k];

char c2 = v2[k];

if (c1 != c2) {

return c1 - c2; //c1和c2所对应的ASCLL码的差值

}

k++;

}

return len1 - len2; //while循环执行完后,返回两者长度的差值

}

java中怎么判断相等_Java中判断相等 (== 与 .equals())相关推荐

  1. java map key是否存在_java中如何判断map集合中是否存在key

    有两种方法可以判断map集合中是否存在某个key. 方法1:直接使用java api提供的containsKey(): 方法2:循环遍历,逐个比较. java相关视频推荐:java视频 具体实现代码如 ...

  2. java 字符串包含某个字符_java中判断字符串中是否包含某个特定字符串的方法有哪些...

    判断一个字符串是否包含某个子串的n种方法: 1.startsWith()方法 2.contains()方法 3.indexOf方法 startsWith()方法 这个方法有两个变体,用于检测字符串是否 ...

  3. java map key是否存在_java如何判断map集合中是否存在key?

    java如何判断map集合中是否存在key?,方法,遍历,不存在,键值,是一个 java如何判断map集合中是否存在key? 易采站长站,站长之家为您整理了java如何判断map集合中是否存在key? ...

  4. java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。

    方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...

  5. java序列化有什么用_java中序列化的作用

    一  什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...

  6. java list集合增删改_Java中集合类list的增删改查

    今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作 List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类 ...

  7. Java NIO_I/O基本概念_Java中的缓冲区(Buffer)_通道(Channel)_网络I/O

    I/O基本概念 缓冲区基础 缓冲区是I/O的基础, 进程使用read(), write()将数据读出/写入从缓冲区中; 当缓冲区写满, 内核向磁盘发出指令, 将缓冲区中数据写入磁盘中(这一步不需要CP ...

  8. java修改list中对象的值_Java中List集合的一点总结

    为什么要用接口引用指向实现类的对象? 这种写法其实java多态的表现形式 多态的定义: 指允许不同类的对象对同一消息做出响应. 即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就 ...

  9. java类怎么删除对象_java中对象的生成使用和删除

    请教大神,在java里,对象生成后,如何删除对象呢?请教大神,在java里,对象生成后,如何删除对象呢? 对象状态由JVM自动管理,GC线程自动回收无用对象,无需也不能自己删除对象. 请问在JAVA中 ...

  10. java 字符 几个字节_java中字符串占几个字节

    首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性.因此,Java中 ...

最新文章

  1. Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办
  2. mfc ado 链接mysql 数据_MFC用ado方法和数据库连接后,怎么取得数据?(高加分)...
  3. Oracle打开虚拟机闪退,虚拟机上启动Oracle服务为什么自动停止,怎么处理?
  4. linux登录界面主题,Ubuntu 12.10登录界面主题:Butterfly
  5. Python sys模块的使用
  6. STL 容器和迭代器连载8_访问顺序容器的元素
  7. 图片 button 去背景色_不会PS没关系,用Word更换证件照背景色只要10秒!
  8. pytorch创建dataloader和可视化图片
  9. shell转化bat工具_shell脚本与bat转换
  10. 腾讯、京东、滴滴、字节跳动……15个大厂在数据治理和数据分析上的真实案例
  11. 计算机文档翻页怎么设置,PDF文档翻页设置
  12. Django邮件应用--QQ邮箱、网易邮箱(一)
  13. 写给自己过去的一封信:成功=好习惯+自控力
  14. 用python批量生成有效的IP地址
  15. Java后端面经(部分)
  16. Office 365 IT Professional—— 如何将Office 365中的文档同步到客户端,加强协同管理
  17. 机器学习模型训练测试完整步骤
  18. 构建一个你自己的类微信系统 -- 可扩展通信系统实践
  19. 信息可视化的简单概述
  20. 非门,与门,或们怎么仅用与非门构成,非门,与门,或们怎么仅用或非门非门构成

热门文章

  1. c语言 函数的参数传递示例_isunordered()函数与C ++中的示例
  2. Java FilterInputStream reset()方法与示例
  3. matlab上机实验1,上机实验1:熟悉matlab基本操作
  4. c#hello world_C#| 打印消息/文本(用于打印Hello world的程序)
  5. ruby array_在Ruby中使用Array.delete()和Array.delete_at()从Array中移除元素
  6. SpringBoot时间格式化的5种方法!
  7. linux localhost的修改
  8. TextView 单行显示长文本
  9. 电脑数据存储工具----光盘驱动器
  10. Mybatis中(#{ })模糊查询like(使用oracle的concat函数嵌套拼接SQL)