编辑?:
我正在编写一些代码以更好地理解String类,特别是使用==和.equals比较器。
我的程序相对简单。我已经声明了2个String文字和1个String对象,它们都具有相同的值“banana”。
我知道==主要是测试物理内存引用,而.equals实际上是检查包含的值。
那么,如果我将strtest4声明为新对象,为什么我的第3个条件语句会成立呢?所有其他人都有意义。
private static String str;
private static String strtest;
private static String strtest4 = new String();
public static void main(String[] args) {
str = "banana";
strtest = "banana";
strtest4 = "banana";
if (str == strtest) System.out.println("str and strtest point to same location in memory");
if (str.equals(strtest)) System.out.println("str and strtest have the same value contained");
if (str == strtest4) System.out.println("\nstr and strtest4 point to same location in memory");
if (str.equals(strtest4)) System.out.println("str and strtest4 have the same value contained");
}
运行程序时收到以下输出:
str和strtest指向内存中的相同位置
str和strtest包含相同的值
str和strtest4指向内存中的相同位置
str和strtest4包含相同的值