A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 348532020 中级黑马   /  2015-5-8 16:14  /  744 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题一:
  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方法以后又回到了之前的指向对象?

有些迷惑不解,或者说我是概念不清,混淆概念了。求大神回答。
如果你的回答只有一句话为了挣点黑马币什么的,那你就不要回复了谢谢。我需要的是能解决我疑惑的人,而不是只说结果和说的不清不楚的人。我自己运行也能知道答案,但是我要的是讲解。
求懂得人回答,谢谢!


4 个回复

倒序浏览
有大神能解答吗?谢谢
回复 使用道具 举报
本帖最后由 l763631191 于 2015-5-8 16:47 编辑

你这注册这么几天就搞这么多技术分和黑马币了,哇哈哈~~
回复 使用道具 举报
l763631191 发表于 2015-5-8 16:44
你这注册这么几天就搞这么多技术分和黑马币了,哇哈哈~~

只要努力和用心,一切皆有可能{:2_36:}
回复 使用道具 举报
有大神解释吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马