黑马程序员技术交流社区

标题: 引用类型做参数传递不是会改变实参的值吗? [打印本页]

作者: 习嘻嘻    时间: 2013-11-16 11:13
标题: 引用类型做参数传递不是会改变实参的值吗?
本帖最后由 习嘻嘻 于 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;


作者: 何丛    时间: 2013-11-16 12:59
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的引用地址是改变了


作者: 不抛弃不放弃    时间: 2013-11-16 13:13
引用数据类型改变不了实参的值, 他改变的是 变量指向的内存地址
作者: 习嘻嘻    时间: 2013-11-16 13:15
何丛 发表于 2013-11-16 12:59
public final class String extends Object implements Serializable, Comparable,CharSequence
String 类 ...

很详细,谢谢
作者: 习嘻嘻    时间: 2013-11-16 13:19
不抛弃不放弃 发表于 2013-11-16 13:13
引用数据类型改变不了实参的值, 他改变的是 变量指向的内存地址

我想说的是,他会改变内存地址中的内容,而原来实际参数即引用还是指向这片内存的,所以会影响结果。
作者: 黄炳期    时间: 2013-11-16 14:38
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2