java的String中,如果==比较的是变量地址,那么为什么这个图片里面的两个变量相同,按照道理,a和b是两个变量,他们的地址应该不一样
java的相同字符串只会存在一个,a,b的地址指向是相同地址,所以是true
【相关推荐】
public static void main(String[] args) throws IOException {
System.out.println("请输入字符串:");
String str,sum="";
int i;
Scanner cin = new Scanner(System.in);
str = cin.nextLine();
//回文字符串,从左向右与从右向左,对应字符一样
char[] ch=str.toCharArray();//将String转换为char数组
for(i=ch.length-1;i>=0;i--){
sum+=ch[i];//将字符串颠倒
}
if(sum.equals(str))
System.out.println("是回文字符串");
else
System.out.println("不是回文字符串");
}
请输入字符串:
a123_5_321a
是回文字符串
进程完成,退出码 0
你这个字面量的原因,你这里是把“a”赋给了两个变量,由于java中String类型吃的堆内存很大,所以有字符串常量池的设计,也就是说你这个“a”被放进了常量池,后续你不管再给哪个东西显示的赋值“a”,它都使用的是常量池里的“a”,自然,这样他们内存地址肯定是一样的。当然,你也可以使用new来创建新的字符串,那就是新的对象了,你可以自己跑这段代码,感受一下里面的原理
String a = "a";
String b = new String(a);
String c = new String("a");
System.out.println(a == c); // false
System.out.println(a == b); // false
System.out.println(b == c); // false
System.out.println(b.intern() == c.intern()); // true