String类型中 “=="和"equals”比较的不同
发布时间:2021-11-09 10:02:10 所属栏目:PHP教程 来源:互联网
导读:String类型中 ==和equals比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否有这个产量对应的对象,有就直接将找到的对象的地址赋给新创建的变量,没有就重新创建一个对象,然后赋给新创建的变量 String st
String类型中 "=="和"equals"比较的差别 先说明一下String类型的变量的创建方式 在创建新的String类型的变量时,首先会在缓冲区查找是否有这个产量对应的对象,有就直接将找到的对象的地址赋给新创建的变量,没有就重新创建一个对象,然后赋给新创建的变量 String str = "str";//创建一个新的String类型的变量,在已有的缓冲区中没有就重新创建一个 String str1 = "str";//创建时在缓冲区发现有和即将创建的值一样的对象,就将str的地址赋给str1 str == str1;//true String str2 = new String("str");//强制创建一个对象str2,地址和str,str1不同 str2 == str;//false因为==比较的是对象的地址,而二者地址不同,故为false str2 == str1;//false同上 str2.equals(str1);//true String继承Object方法中的equals方法进行重写,内部比较是两个String类型的字符串一个一个字符的比较(下边是源码) str2.eauals(str);//true同上 public boolean equals(Object anObject) {//String类中equals源码 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; } 其他类型 "=="和"equals"的比较 所有的类都继承了Object类,Object类中有一个equals方法,源码如下 public boolean equals(Object obj) { return (this == obj); } "=="比较的就是引用对象的地址是否相等,而不是比较值,比较值的话就需要重写equals方法 对于基本数据类型只能用"==",比较的是两个基本类型的值 ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |