源于一次公司项目,对java基础还是理解的太浅.
通常来说,Java判断两个对象是否相同可以用 == or equals();其中==是对对象内存地址的比较,若地址相同则判断为true,否则为false;而如以下代码,理想情况下程序会打印输出
example1:
String a = "abc";String b = "abc";String c = new String("abc");String d = new String("abc");System.out.println(a == b);System.out.println(a == c);System.out.println(c == d);
那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;
那么a==b将返回false,此时a和b指向不同的对象。
2、用equals方法比较的是字符串的内容是否相同,
example:String a=new String(“abc”);
String b=new String(“abc”); a.equals(b);将返回true。
通常情况下,为了避免出现上述问题,判断字符串是否相等使用equals方法
if(str1.equals(str2)){System.out.println("字符串相等");}else{System.out.println("字符串不相等");}
例:
String a = "数据";String b = "数据";
a.equal(b)和b.equal(a)有什么区别
a.equal(b)和b.equal(a)表达式表达的意思是一样的,都是为了判定a和b两个string对象是否相同,
但是,前者表示a对象不能为空,否则会报错,后者表示b对象不能为空,否则报错
equals()是object的方法,其实现为:
public boolean equals(Object obj) {return (this == obj);}
String方法对其重写:
public boolean equals(Object anObject) {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;}
