在最近的开发中,我踩到一个坑,过程是这样的。我需要在Java中判断两个字符串是否相等,按照以往的经历使用 == 双等号的操作符来判断,但是在Java中,这样写却没有实现我想要的效果。经过查阅资料后,把得到的经验分享给大家。

相等判断操作符==

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

使用==判断字符串时,判断的是两个字符串是否指向同一个对象。如果两个字符串指向同一个对象,那么它们就是相同的,使用==比较的结果也就是True。如果两个字符串指向不同的对象,那么它们不相同,使用==比较的结果也就是False。

通过字面赋值的时候,相同的字符串会指向同一个对象,例如:

String str1="abcde";// 把"abcde"放入常量池中,编译时产生

String str2="abcde";// 引用常量池中的对象,不会重新创建对象

str1 == str2; //str1和str2指向同一个对象,结果是true

但如果另有一个str3,不是通过这种字面的方式被赋值的,即便str3的值也是"abcde",例如:

String str3 = new String("abcde");//运行时把"abcde"放入堆里面,在堆中创建一个对象

str1 == str3; //str1和str3指向不同的对象,结果是false

相等判断方法equals()

在Java中,可以使用equals()方法判断字符串的内容是否相同。

String str1="abcde";

String str3 = new String("abcde");

str1.equals(str3);//str1和str3的值一样,结果是true

str1 == str3; //str1和str3指向不同的对象,结果是false

equals()方法原理

为什么可以使用equals()方法呢,我们看下String 类中的 equals()方法的源码。

public boolean equals(Object anObject) {

if (this == anObject) { //先比较两个字符串的引用是否相等(是否指向同一个对象), 是直接返回true

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()方法时,首先会判断两个字符串的引用是否相等,也就是说两个字符串引用是否指向同一个对象,是则返回true。

如果不是指向同一个对象,则把两个字符串中的字符挨个进行比较。

总结

上述就是我为大家分享的java判断两个字符串是否相等的方法了,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。在不断的学习中,我相信会有更多的经验分享,欢迎大家持续关注。

到此这篇关于Java中判断字符串是否相等的实现的文章就介绍到这了,更多相关Java 字符串相等内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

java 字符串 判断_Java中判断字符串是否相等的实现相关推荐

  1. java数组为空如何判断_Java中判断数组是否为空?

    一. java中 1.判断一个String类型的字段是否为空 StringUtils.isBlank()可判断 null,"","  ",三种类型 2.判断两个 ...

  2. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  3. java字符串转字符串列表_Java中的字符串列表示例

    java字符串转字符串列表 We have to read total number string i.e. "n", create a list of the Strings a ...

  4. java 字符串驻留_Java中的字符串驻留

    最近在工作的时候,一句再正常不过的代码String a = "hello" + "world";被改成了new StringBuilder().append(& ...

  5. java字符截取_java中截取字符串方法

    Java 简介 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符,一直 ...

  6. java字符串长度_Java中String字符串的最大长度?

    1.Java中的字符串String最大长度,编译期如果是javac编译就是65534.如果绕过javac编译的限制,其最大长度可以达到u2类型变达的最大值65535. Oracle JDK的编译工具J ...

  7. java 字符串用法_Java中的字符串用法小结

    本文实例总结了Java中的字符串用法.分享给大家供大家参考.具体分析如下: 字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对 ...

  8. java定义字符串常量_Java中的字符串常量池

    ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...

  9. java打印字符串引用_Java中的字符串及其中的常用方法

    字符串是由多个字符组成的一串数据 String的特点: 字符串是常量,一旦被创建就不能改变,这是因为字符串的值是存放在方法区的常量池里面,但是引用可以改变.字符串字面值"ab"也可 ...

最新文章

  1. sed及awk显示指定行内容
  2. jsonp 跨域原理详解
  3. C#中的集合、哈希表、泛型集合、字典
  4. 12.15模拟:总结
  5. Linux命令之su -- 用于切换当前用户身份到其他用户身份
  6. linux 远程调试文件夹,GDB远程调试开发板程序
  7. Java连载3-编译与运行阶段详解JRE,JDK,JVM关系
  8. 关于多文档MFC从xp系统上移植到win7上出现错误的问题解决经验
  9. 95-138-010-源码-Function-ReduceFunction
  10. java应用程序做授权_java-为我的Web应用程序编写授权过滤器(JSF ...
  11. 【NOIP2010】【Luogu1190】接水问题(给定顺序的模拟)
  12. C++ 注册表编程(包含权限的提升)
  13. 计算机文件图标怎么一致大小,电脑图标大小设置的几种方法
  14. mysql pxc 安装_MYSQL PXC 集群安装
  15. 杭州十二条经典登山路线
  16. JavaSE Map集合 HashMap和Hashtable的区别 Collections(集合工具类) 集合练习 模拟斗地主(洗牌,发牌,看牌)
  17. 知识付费网站源码可开分站一键更新后台数据
  18. 错误: tensorflow:Early stopping conditioned on metric `val_accuracy` which is not available
  19. 大型机汇编HLASM - HOOK ISPF命令START(一)
  20. 微信小程序连接蓝牙ble教程(目录)

热门文章

  1. python numpy花哨索引
  2. 《机械设计基础》在线平时作业1
  3. UVM内callback机制的使用
  4. Oracle字符串拆分
  5. MsSql分割字符串拆分
  6. 【论文】3D U-Net: Learning Dense Volumetric Segmentation from Sparse Annotation
  7. 施密特触发器运算放大电路
  8. oracle排序函数
  9. mac菜单栏不显示了,如何设置?
  10. 数据模型最佳实践_数据科学家应了解软件工程最佳实践