public class StringTest{ public static void main(String []args){ String a = "test"; String c = "te"+"st"; if(a==c) System.out.println("a==c!"); if(a.equals(c)) System.out.println("a.equals(c)!"); } } 用它以测试就知道,确实是 true 但是String a = "test"; String c = "te"+"st"; 有很大的差距String a = "test"; 创建了两个对象 而String c = "te"+"st"; 创建了三个对象
String s="string", string被保存在常量池中,之后指向string的引用都指向该字符串在常量池的入口
String a = "test";
String c = "te"+"st";
这里总共产生了3个string对象,test,te,st,a和c都指向test
上面两个大侠说的对,
如果在定义的时候用String c=new String("test")那么这两个值就不相等了。因为在new 的过程中就会新建一个对象
ps答对了的要给分哦
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
但是用new 在堆中则一定创建一个新的,不共享对象
public static void main(String []args){
String a = "test";
String c = "te"+"st";
if(a==c)
System.out.println("a==c!");
if(a.equals(c))
System.out.println("a.equals(c)!");
}
}
用它以测试就知道,确实是 true
但是String a = "test";
String c = "te"+"st"; 有很大的差距String a = "test"; 创建了两个对象
而String c = "te"+"st"; 创建了三个对象
用==来比较是比较是否指向同一个对象,那应该比较对象a和c是否相等吧!
用equals()方法是比较内容,那应该比较字符串"test"和"te"+"st"是否相等吧!
你说String a="test"是那2个对象啊?
String c="te"+"st"是那3个对象啊?
String c="te"+"st";一个"te",一个"st",另一个是指向"test"的引用对象c
你和你弟弟是一个妈生的!!可是毕竟你还是你 你弟弟还是你弟弟不是同一个人@!!
叫你的名字!!比如你叫张三 张三就是你 你就是张三 都是同一个人!!
提倡 用对象比较!~!!同是顶上面的!!