其他语言比较两个字符串是否相同通常用“==”,但在java中要用equals()。

一、“==”

“==”比较的是是否为同一个对象,两个不同的字符串对象,即使值是相同的,用“==”还是返回false。

举个例子:

String a = "helloworld";
String b = "helloworld";
String c = new String("helloworld");
System.out.println(a==b);        //输出true
System.out.println(a==c);        //输出false

为什么a==b返回true,而a==c返回false?

因为JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串。

而用new则会创建一个新的对象(看了一篇大佬博客,好像意思是也是指向同一个常量,链接:https://www.cnblogs.com/xiaoxi/p/6036701.html,这边就理解为创建了一个新对象吧,具体可以自己去看)

理解了上面一段,就可以明白a和b是同一个字符串的引用,而a与c是不同的对象的引用,所以a==b输出true,a==c输出false。

那要想比较两个字符串对象的所有字符是否相同该如何比较,用equals()方法!

二、equals()方法

equals()是根类Obeject中的方法,在实现时其实也是调用的“==”,但在String类中重写了此方法(见补充)。重写后的equals 方法比较两个字符串对象的所有字符是否相同。

equals如何使用?

例:A字符串和B字符串比较:

if(A.equals(B)){}

三、补充

equals是根类Obeject中的方法。源代码如下:

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

可见默认的equals方法,直接调用==,比较对象地址。

不同的子类,可以重写此方法,进行两个对象的equals的判断。

String类源码中重写的equals方法如下,

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

从上面的代码中可以看到,

  (1)String类中的equals首先比较地址,如果是同一个对象的引用,可知对象相等,返回true。

  (2)如果不是同一个对象,equals方法挨个比较两个字符串对象内的字符,只有完全相等才返回true,否则返回false。

java 判断两个字符串相等相关推荐

  1. Java判断两个字符串是否互为变形词

    判断两个字符串是否互为变形词 [题目] 给定两个字符串 str I 和 str2, 如果 strl 和 str2 中出现的字符种类一样且每种字符出现的次数也 一样,那么 str l 与 str2 互为 ...

  2. java判断两个字符串是否相等_JavaScript中判断两个字符串是否相等的方法

    先将用户的输入值全部转换为大写(或小写),然后再行比较: 大家可以先参考实例: var name = document.form1.txtUserName.value.toLowerCase(); i ...

  3. ==和equals判断两个字符串是否相等

    资料 java 判断两个字符串相等 深入理解Java中的String 本质区别 == 基本int类型,直接比较, 引用类型,比较地址. 一 "==" "=="比 ...

  4. java中怎么判断字符相等_Java中如何判断两个字符串相等

    如何判断两个字符串相等 Java 中可以有两种方法来做这个事,== 运算符 与 equals 方法.但是这两者又有什么区别? 先来看一段示例代码: String a1 = "abc" ...

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

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

  6. java和js中判断两个字符串是否相等对比

    链接一: JavaScript中的基本字符串与字符串对象的区别 链接二: JAVA如何判断两个字符串是否相等 链接三: js中的"=="和equals()以及is()三者的区别 在 ...

  7. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

    ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...

  8. java 比较两个字符串大小

    java 比较两个字符串大小 判断两个字符串是否相等 比较两个字符串的大小 判断两个字符串是否相等 如果state是true,则相等:是false,则不相等. String s1 = "zh ...

  9. 判断两个字符串是否互为变形词

    判断两个字符串是否互为变形词 [题目] 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词.请实现函数判断两个字符 ...

  10. php 字符串不相等判断,php简单判断两个字符串是否相等的方法

    php简单判断两个字符串是否相等的方法 本文实例讲述了php简单判断两个字符串是否相等的方法.分享给大家供大家参考.具体实现方法如下: function strcomp($str1,$str2){ i ...

最新文章

  1. python培训班价格-上海Python培训学费价格是多少
  2. hdu 4309(最大流+枚举状态)
  3. 大话PM | 产品经理必备利器——UML
  4. web service notes
  5. java nlpir_4-NLPIR汉语分词系统-JAVA
  6. python xlutils教程_Python基于xlutils修改表格内容过程解析
  7. 3 分钟了解 JSON Schema
  8. csv java 科学计数法_javaweb开发页面数字过长显示科学计数法的问题
  9. vfpodbc.dll下载, 各版本下载,包含所有版本
  10. n9009+android+4.4.2,三星N9009 (Galaxy Note 3 电信版 Android 4.4)ROOT教程,一键获取ROOT权限...
  11. RS485_Modbus通讯笔记
  12. oracle vm win10,virtualbox win10系统下载-oracle vm virtualbox windows 10 64 bitv6.1.14 最新版 - 极光下载站...
  13. 水果店做生意不好怎么办,水果店生意不好如何做好
  14. 牛客动态规划习题:Min酱要旅行(背包变种)
  15. 神气的 iOS 打包
  16. 运营商大数据是什么,是如何实现精准获客的
  17. Python 鸡兔同笼 编程题
  18. 从签到功能到用户激励体系——产品经理项目实录
  19. nginx 拦截非法字符,nginx禁止url访问特定字符,nginx过滤url访问
  20. 用计算机计算出爱情数字,用数字表示爱情的密码 数字代表的爱情含义大全

热门文章

  1. 最常用到的35种心理效应集锦
  2. 光栅投影三维精密测量-达飞鹏下载
  3. 针对VMware安装Win10需要安装.NET Framework 3.5常见的0x800F0906、0x800F081F错误解决办法
  4. 你有多久没有看星星了呢?【爬取NASA的科普网站上的所有图片】
  5. java pdf电子签名_java多种方式实现pdf文件电子签名
  6. 千锋python培训班怎么样
  7. canvas画正六边形
  8. 大师速写作品及理论,有你喜欢的知识
  9. Java 根据输入的a、b、c,计算三角形面积和周长。根据程序上下文以及输入输出样例,填写程序空白,使程序完整
  10. ## Android Studio 开发(四)--蓝牙通信