字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。
(跟用new的不一样,new不是放在字符串常量池的哦)
对于基本类型来说,==是进行数值的比较。
对于引用类型(eg:String)来说,==是进行【地址值】的比较。
插一句:方法放在栈里的,创建对象(new一个)才是放堆里
超类也是父类的意思
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:
public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。
注意事项:
- 任何对象都能用Object进行接收。
- equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
- 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:“abc”.equals(str) 不推荐:str.equals(“abc”)
public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。
equals只是比较内容=不=,不比较地址等不等,与“==”有区别的
代码区别:
三、equals比较对象的话:
可参考:https://blog.csdn.net/QLBFA/article/details/109345588
class Person{
String name;
}
public class settest {
public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person();
System.out.println(p1.equals(p2)); //false
}
}
比较对象是不等的:因为equals的源码是: