一、先看一段代码,你觉得输出是什么? String str1 = ""; String str2 = new String(""); System.out.println(str1 == ""); System.out.println(str2 == ""); 二、上面的代码输出是true、false,为什么呢? 1、str1是从字符串常量池获取空字符串"",如果没有则在常量池中创建空字符串对象,然后再给str1赋值,此时str1属于局部变量,存放在栈中。str2同样在字符串常量池中获取空字符串,然后再根据空字符串创建一个新的对象给str2,只不过str2是存放在堆中 2、==用于判断地址是否一致,由于空字符串""是从字符串常量池中获取,从1可知str1也是字符串常量池中获取的,所以str1 == ""返回true;str2由于是重新new的对象,所以str2 == ""返回false 3、总结:判断字符串是否相等请使用equals,不要使用==