首先,不是很明白楼主的意思,暂且有两种理解 (1) 把"="理解为赋值运算符 (2)把"="理解为"=="(比较运算符)
对于第一种情况,上代码:
class Demo1 {
public static void main(String[] args) {
String s = "abc";
String s1 = "abc";
System.out.println(s=s1);
}
}
运行结果:
abc
对于第二种情况,代码如下:
class Demo2 {
public static void main(String[] args) {
String s = "abc";
String s1 = "abc";
System.out.println(s==s1);
}
}
运行结果:
true
其实这种涉及了一个比较复杂的问题.
字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把什么样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
实际上,String中的equls方法已经做了处理,这个方法是用于比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它吧!
下面给出一个例子:
public class Demo3{
public static void main(String[] args){
String S1=new String("abc");
String S2="abc";
String S3="abc";
String S4=new String("abc");
System.out.println(S1==S2);
System.out.println(S2==S4);
System.out.println(S2==S3);
System.out.println(S1==S4);
}
}
运行的结果是:
false
false
true
false |