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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 习嘻嘻 于 2013-11-16 13:22 编辑

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;

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

倒序浏览
public final class String extends Object implements Serializable, Comparable<String>,CharSequence
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。
final类型的类,不可以被继承,成员方法默认为final,不能被重写。
main方法中的str1指向“abc"的首地址,str2指向"xyz"的首地址,
调用show时,将show中str1赋值为“abc"的首地址,str2指向"xyz"的首地址,执行s1 = s2+s1+”Q”;
   s2 = “W”+s1;时将show中str1重新赋值为“abcxyz Q"的首地址,str2重新指向"Wabc"的首地址。show中的str1,str2引用地址发生改变,但是main中的str1,str2是没有发生改变的
执行如下操作String s1 ="abc";s1=s1+"def";
是先开辟一块空间放入"abc",并将地址赋给s1,再开辟一块空间放入"abcdef",将它的地址赋给s1,而不是在"abc"的地址中改变原来的值为"abcdef",s1的引用地址是改变了

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
引用数据类型改变不了实参的值, 他改变的是 变量指向的内存地址
回复 使用道具 举报
何丛 发表于 2013-11-16 12:59
public final class String extends Object implements Serializable, Comparable,CharSequence
String 类 ...

很详细,谢谢
回复 使用道具 举报
不抛弃不放弃 发表于 2013-11-16 13:13
引用数据类型改变不了实参的值, 他改变的是 变量指向的内存地址

我想说的是,他会改变内存地址中的内容,而原来实际参数即引用还是指向这片内存的,所以会影响结果。
回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马