java的恒等运算符,java字符串相等判断

  java的恒等运算符,java字符串相等判断

  1. 起因:字符串恒等判断

  //字符串是引用类型

  String str1=新字符串( hello );

  String str2=新字符串( hello );

  system . out . println(str 1==str 2);

  //假

  system . out . println(str 1 . equals(str 2));

  //真正的在线学习视频分享:java在线学习

  2. 关系操作符 “==”

  重要:“==”只能处理基本数据类型对应的值的身份判断,不适用于引用数据类型(其值存储在地址中)。

  公共类Main {

  公共静态void main(String[] args) {

  int n=3;

  int m=3;

  //真

  system . out . println(n==m);

  String str=新字符串( hello );

  String str1=新字符串( hello );

  String str2=新字符串( hello );

  //假

  system . out . println(str 1==str 2);

  str1=str

  str2=str

  //真

  system . out . println(str 1==str 2);

  }

  }n==m结果为真,很好理解。变量n和变量m的存储值都是3,必须相等。为什么str1和str2的结果不一样?要理解这一点,我们只需要了解基本数据类型变量和非基本数据类型变量的区别。

  Java中的8个基本数据类型

  浮点型:float,double;Integer: byte,short,int,long;类型:char;boolean类型:boolean。

  对于这八种基本数据类型的变量,变量直接存储“值”,所以当使用关系运算符==进行比较时,比较的是值本身。要注意浮点型和整型都是有符号类型的,而char是无符号类型的.

  对于具有非基本数据类型(引用类型)的变量,如字符串类型,引用类型变量存储的不是“值”本身,而是内存中与之关联的对象的地址。比如str1不是直接存储的字符串‘hello’,而是对象对应的地址。

  因此,当第一次使用==比较str1和str2时,结果为假。因为它们指向不同的对象,也就是说,它们实际上存储的是不同的内存地址。在第二次比较中,str1和str2同时指向str所指向的对象,所以结果无疑是真的(同一个地址)。

  3. Object方法 “equals()”

  equals方法是基类Object中的一个方法,因此它可用于从Object继承的所有类。在Object类中,equals方法用于比较两个对象的引用是否相等,即是否指向同一个对象。

  公共类Main {

  公共静态void main(String[] args) {

  String str1=新字符串( hello );

  String str2=新字符串( hello );

  //真

  system . out . println(str 1 . equals(str 2));

  }

  }String类重写equals方法来比较存储在所指向的String对象中的字符串是否相等。其他类如Double、Date、Integer等。重写了equals方法来比较所指向的对象中存储的内容是否相等。

  小结:

  For==:如果作用于基本数据类型的变量,直接比较它们存储的“值”是否相等;如果作用于引用类型的变量,则比较所指向对象的地址。

  对于equals方法:如果equals方法没有被重写,则比较引用类型的变量所指向的对象的地址;如果String和Date之类的类覆盖了equals方法,它们将比较所指向对象的内容(equals方法不能作用于基本数据类型的变量)。

  更多文章和教程,请访问:java简介。以上是java中字符串同一性判断的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: