1)str1 == str2表示比较str1与str2两个字符串是否引用同一个对象;
(2)str.equals(str2)是表示比较str1与str2两个字符串的内容是否相等;
(3)为了比较基本数据类型变量的值是否相等一般是使用“==”,但这个办法并不适用String对象(或者其
他任何对象)。即不适用引用类型的比较。
请看下面的例子:Test4.java
(1)输出结果为:
false
false
true
true
false
true
(2)对于str1和str3,都是引用同一个字符串常量"abc",其内容也当然相同。
故"str1 == str3"和"str.equals(str3)"均取真值true。
(3)对于str1和str4,内容虽然相同,但引用的却不是同一对象。原因在于:
str1引用的是的编译时就确定的字符串常量,而str4引用的是程序运行时才创建的对象。
也就是说:字符串常量"abc"是在编译时就写到内存了。
示例源码如下:
package com.yb.Test;
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "abc";
String str2 = "Abc";
String str3 = "abc";
String str4 = new String("abc");
System.out.println(str1 == str2); //输出false
System.out.println(str1.equals(str2)); //输出false
System.out.println(str1 == str3); //输出true
System.out.println(str1.equals(str3)); //输出true
System.out.println(str1 == str4); //输出false
System.out.println(str1.equals(str4)); //输出true
}
}
复制代码
内存分析图:
|