问题一:
String s1 = "a";
String s2 = "b";
String str6 = s1 + s2;
System.out.println(str6 == "ab");
先说下我的理解:String1和2这个不用说了,两个肯定地址和值都不一样。
String str6 = s1 + s2; 内部操作是否为:在常量池中开辟一个空间,内容为"ab",然后把地址值赋值给str6 .此时str6是在堆中还是栈中?
第二个不解的地方就是 ==比较引用类型,应该是比较的地址值。str6的地址值是常量池中的地址值赋值给str6 ,但是"ab"的地址值是什么?不是常量池中的地址吗?内部操作是怎么样的,"ab"的值是哪里的地址值,还是根本就不是地址值??
问题二:
public static void main(String[] args){
String s1 = “abc”;
String s2 = “xyz”;
show(s1,s2);
System.out.println(s1+”-----”+s2);
}
static void show(String s1,String s2){
s1 = s2+s1+”Q”;
s2 = “W”+s1;
}
此程序的输出结果是什么。记不太清楚 基本类型赋值 和引用类型赋值的区别了。
但是我的理解是此处执行过show方法以后是s1,s2的指向都变了。为什么回到main方法以后又回到了之前的指向对象?
有些迷惑不解,或者说我是概念不清,混淆概念了。求大神回答。 |