public class Test123 {
private static String s1="string";
public void method(String str1,String str2){
str2=str2+"c";
System.out.println("str1==str2: "+(str1==str2));
}
public static void main(String []a){
String s2 = "string";
String arg="strin"+"g";
System.out.println("s1==arg: "+(s1==arg));
System.out.println("s2==arg: "+(s2==arg));
System.out.println();
Test123 yy = new Test123();
yy.method("abc", "ab");
}
}运行结果如下:
s1==arg: true
s2==arg: truestr1==str2: false我想问s1==arg,s2==arg,为什么返回真?
他们不是不同的对象么,不是应该用equals才会返回真么?
str1==str2: false 又作何解释?
头痛中.请教各人达人。
private static String s1="string";
public void method(String str1,String str2){
str2=str2+"c";
System.out.println("str1==str2: "+(str1==str2));
}
public static void main(String []a){
String s2 = "string";
String arg="strin"+"g";
System.out.println("s1==arg: "+(s1==arg));
System.out.println("s2==arg: "+(s2==arg));
System.out.println();
Test123 yy = new Test123();
yy.method("abc", "ab");
}
}运行结果如下:
s1==arg: true
s2==arg: truestr1==str2: false我想问s1==arg,s2==arg,为什么返回真?
他们不是不同的对象么,不是应该用equals才会返回真么?
str1==str2: false 又作何解释?
头痛中.请教各人达人。
==比的是引用
只有当两个变量同时指向一个地址时
才返回ture
这种形式的String s1 = "string";
在datesegment里的String连接池中创建了一个字符串
而下次String s2不是new出来的话
也会在String连接池找有没有对应的字符串
如果原先有已创建的字符串
那么,不会再新创建
s2也会指向s1的地址
而在连接池中
比的是equals
所以String arg="strin"+"g";
这种拼串的方式得到的和前面一样
也就是说s1,s2,arg同时指向一个地址
好像对==和equals也没有真正弄清楚。
感觉有些概念混淆。
其实是一个面试题来的。
平常都用equals的。明天要去面试,于是就拿出题来做
发现这个东西没理解。
string 这个东西很难看透啊!
不要误解为指针了
看了一下,有认识了不少东西
谢谢ZangXT
public class xx{
public static void main(String[]args){
String s1="phenix1"+"phenix2";//两个字符串常量相加的结果会在常量池创建
String s2="phenix1phenix2";
System.out.println(s1==s2);
String s3="phenix3";
String s4=s3+"phenix4";//当有变量和另一个字符串常量相加时不会在常量池创建结果。
String s5="phenix3phenix4";
System.out.println(s4==s5);
}
}