二元运算符“==”与方法equals()

时间:2022-05-26 16:16:08

运算符“==”

1.“==”一般应用于基本数据类型(四类八种)比较
2.“==”比较对象,比较的是他们在内存中存放的地址。

程序1
String s1 = "Monday";
String s2 = "Monday";
System.out.println(s1 == s2);

显然,上述结果应为 true

方法equals()

1.Java中所有的类均extends Object,在object基类中定义了一个equals()方法,该方法的初始行为是比较对象的内存地址。但是,在一些类库中,该方法已经被覆盖 如String,比较的不再是堆内存中存放的地址,而是字符串具体内容。

程序2
String s1 = "Monday";
String s2 = new String("Monday");
System.out.println(s1 ==s2);
System.out.println(s1.equals(s2));

上述结果应为 false true

原因:字符串缓冲池的使用 程序1中,使用s2=“Monday”,此时程序首先会在这个String缓冲池中寻找相同值的对象,显然这里s1先被放到池中,故在s2创建的时候,将s2引用s1所引用的对象”Monday”。
而程序2 中,使用了new操作符,会新开辟地址,s1和s2值相同,但是位置不同. 因此System.out.println(s1 ==s2);为false System.out.println(s1.equals(s2));为true

null、“(空格)”和 “”

String str1 = null; str引用为空,没有被实例化
String str2 = “”; str引用一个空串,已经实例化,内容为空
String str3 = ” “; str引用为空格,已经实例化,内容为空格

1.null判断 一个字符变量是否是null ,使用 逻辑判断 等于(==)与null对象比较,空对象不能使用诸如equals(), isEmpty()等对象方法,因为它未被实例化。equals方法比较的是两个对象的内容是否相同,因此,对象必须有指向的空间,即不能为null,否则,会抛出异常。

2.判断空值可有三种方式:
equals方法比较的是两个对象的内容是否相同,可用表达语句:k.equals(“”) ;
length()方法是查看某个字符串对象的字符个数,可用表达式判断:k.length() == 0 ;
isEmpty()方法是判断某个字符串对象字符个数时候为0,可用表达式判断:k.isEmpty()

3.空格判断 空格内容为一个空格,虽然在输出显示时候和空值一样,都是空的,但是在系统里面的内存机制不一样的,空格字符串表示该对象的内存空间里面有内容,是空格,字符个数是1
equals(” “);