问题一:
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方法以后又回到了之前的指向对象?
有些迷惑不解,或者说我是概念不清,混淆概念了。求大神回答。 如果你的回答只有一句话为了挣点黑马币什么的,那你就不要回复了谢谢。我需要的是能解决我疑惑的人,而不是只说结果和说的不清不楚的人。我自己运行也能知道答案,但是我要的是讲解。 求懂得人回答,谢谢!
|