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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。