首页 > 编程语言 >Java字符串 equals()与==的比较

Java字符串 equals()与==的比较

时间:2023-01-16 22:33:07浏览次数:37  
标签:Java String s2 s1 equals 运算符 字符串

理解 equals() 方法和==运算符执行的是两个不同的操作是重要的。如同刚才解释的那样,equals() 方法比较字符串对象中的字符。而==运算符比较两个对象引用看它们是否引用相同的实例。

下面的程序说明了两个不同的字符串(String)对象是如何能够包含相同字符的,但同时这些对象引用是不相等的:

String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1.equals(s2)); // 输出true
System.out.println(s1 == s2); // 输出false

变量 s1 指向由“Hello”创建的字符串实例。s2 所指的的对象是以 s1 作为初始化而创建的。因此这两个字符串对象的内容是一样的。但它们是不同的对象,这就意味着 s1 和 s2 没有指向同一的对象,因此它们是不==的。

因此,千万不要使用==运算符测试字符串的相等性,以免在程序中出现糟糕的 bug。从表面上看,这种 bug 很像随机产生的间歇性错误。

对于习惯使用 C++ 的 String 类的人来说,在进行相等性检测的时候一定要特别小心。C++ 的 String 类重载了 == 运算符以便检测字符串内容的相等性。可惜 Java 没有采用这种方式,它的字符串“看起来、感觉起来”与数值一样,但进行相等性测试时,其操作方式又类似于指针。语言的设计者本应该像对 C++ 那样也进行特殊处理, 即重定义 == 运算符。

当然,每一种语言都会存在一些不太一致的地方。C 程序员从不使用==对字符串进行比较,而使用 strcmp函数。Java 的compareTo方法与strcmp完全类似。

标签:Java,String,s2,s1,equals,运算符,字符串
From: https://www.cnblogs.com/lixuejian/p/17056453.html

相关文章

  • 9.使用JavaConfig实现配置
    要完全不使用Spring的xml配置了,全权交给Java来做!JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功能!实体类packagecom.zuo.entity;importorg.sp......
  • 手写笔记18:谈谈Java内存模型?
    ......
  • 18.(行为型模式)java设计模式之观察者模式
    一、什么是观察者模式定义对象间⼀种⼀对多的依赖关系,使得每当⼀个对象改变状态,则所有依赖于它的对象都会得到通知并⾃动更新,也叫做发布订阅模式Publish/Subscribe,属于⾏......
  • [JavaScript]前端解析cookie为对象
    参考解析页面传参varcookie_str=document.cookievarcookie_arr=cookie_str.split(";")varcookie_obj={}for(vari=0;......
  • 13.(行为型模式)java设计模式之模板模式
    一、什么是模板模式定义⼀个操作中的算法⻣架,将算法的⼀些步骤延迟到⼦类中,使得⼦类可以不改变该算法结构的情况下重定义该算法的某些特定步骤,属于⾏为型模式二、模板模......
  • 【Javaweb】给tomcat添加第三方jar包
    就是复制到lib文件夹里面之后点击jar包右键 选择modulelibrary,点击ok就可以了 ......
  • JavaScript验证API
    验证API两个方法:checkValidity():如果input元素中的数据是合法的返回true,否则返回false;setCustomValidity():设置input元素的validationMessage属性,用于自定义错误提示......
  • PHP简单的字符串加密与加密代码
    PHP简单的字符串加密与加密代码代码//加密算法functionencode($string='',$skey='cxphp'){$strArr=str_split(base64_encode($string));$strCount=cou......
  • 【ES6】字符串的拓展
    【ES6】字符串的拓展​​一、为什么ES6要进行字符拓展?​​​​二、ASCLL码、Unicode编码、UTF-8编码的异同​​​​三、ES6新增的字符串接口​​​​1)codePointAt()​​​​......
  • 14.(行为型模式)java设计模式之策略模式
    一、什么是策略模式  策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可......