7 回答
已采纳
211103
TA贡献20条经验 获得超11个赞
首先在内存中的方法是equals不是equal。
要深入的了解这个你需要具体知道数据在内存中的存储方式,基本数据类型和引用数据的地址是存储在栈中,==就是比较的这个内容。equals的话其实也是这个,在java共同父类中Object中有这个方法,不过其在String中将他进行了重写(因为对于引用数据来讲比较地址是没用的,需要具体到值),最终在String中equals比较的就是他们的值。
其实你只要记住比较基本数据类型用==就好,String的话就用equals就好了。
阿旭_
TA贡献217条经验 获得超353个赞
public class Test5 extends Object { public static void main(String[] args) { // 分析equals不同类中的源码比较与==的不同 // /*1、类中equals 此equals来源于Object(默认:Test5 extends Object )*/ // public boolean equals(Object obj) { // return (this == obj); // } System.out.println(new Test5().equals(new Test5()));// 此时equals比较两个不同对应的地址 // /*2、字符串equals ("ABC".equals("ABC")和new String("ABC").equals("ABC")等价)*/ // public boolean equals(Object anObject) { // if (this == anObject) {//2.1 先判断两个地址是否相同 // return true; // } // if (anObject instanceof String) { //2.2 再判断传入的是不是字符串 // String anotherString = (String) anObject; // int n = value.length; // if (n == anotherString.value.length) {//2.3如果是字符串,长度是否相同 // char v1[] = value; // char v2[] = anotherString.value; // int i = 0; // while (n-- != 0) {//2.4如果长度相同,是不是每个对应位置的字符相同 // if (v1[i] != v2[i]) // return false; // i++; // } // return true; // } // } // return false; // } System.out.println("ABC".equals("ABC"));// 地址(否)字符串(是字符串)长度(相同)每个字符(相同)结果是true // 总结,equals就是一个方法,不同的类有不同的代码,也可以自己重写设置自己想要的方法体。 // 归根结底都要用==来比较值(char[字符串就是用的这个比的]、int、boolean……),要么比较地址(两个对象地址是不是一样的) } }
添加回答
举报
0/150
提交
取消