import java.util.*;
class test{
public static void test(StringBuffer s1,StringBuffer s2){
s1 = new StringBuffer("sss");
s2.append("is good");
}
public static void main(String[] args){
StringBuffer stra = new StringBuffer("A");
StringBuffer strb = new StringBuffer("B");
test(stra,strb);
System.out.println("stra的值是:"+stra);
System.out.println("--------------------");
System.out.println("strb的值是:"+strb);
}
}
结果为:
stra的值是:A
--------------------
strb的值是:Bis good
class test{
public static void test(StringBuffer s1,StringBuffer s2){
s1 = new StringBuffer("sss");
s2.append("is good");
}
public static void main(String[] args){
StringBuffer stra = new StringBuffer("A");
StringBuffer strb = new StringBuffer("B");
test(stra,strb);
System.out.println("stra的值是:"+stra);
System.out.println("--------------------");
System.out.println("strb的值是:"+strb);
}
}
结果为:
stra的值是:A
--------------------
strb的值是:Bis good
char*不能返回新的内存地址的.你的s1在传递后,引用不在test函数中被使用了,而是指向了新的对象.
但是在main内,s1是不会发生变化的.
调用方法的时候,s1和s2获得的也只是它们的地址的拷贝。当执行s1 = new StringBuffer("sss");时只是把一个新的对象赋给了s1,也就是s1现在存的是新对象的地址,而stra并没有改变
当执行s2.append("is good");的由于s2和strb指向的时同一个对象,这个操作不会影响strb的值但它对象变了··打个比方:
两个人同用一台电脑,不管这两个人是死是活,电脑还是电脑,不会有任何变化。但是当其中一个人把电脑砸了的时候,另外一个人以后所使用的必然也是一台被砸过的电脑···
小弟愚钝,,没明白你说的意思,能多解释一下吗?跪谢!
-------> 传入的时候指向了A的外包类.
|
public static void test(StringBuffer s1,StringBuffer s2){
s1 = new StringBuffer("sss");
|
--------->现在改指向了,指向了sss了. 但是实参A是不会受到影响的.
s1 = new StringBuffer("sss");
s1指向了一个新的StringBuffer事例
1、基本类型:你有一个数i=100,你传的时候,就是拿了张纸,上面写了100,传过去。无论收到的人在纸上怎么改,你这里还是100。
2、对象的引用,比如你的仇家住在某某地址,你手上有一个变量记住了这个地址,比如String a=new String("123");。
你请了一个杀手去干掉那家伙,就把这个地址抄了一份给那个杀手。这杀手拿了这个地址,如果按地址去杀了,那么你再按这个地址去看,显然那人已经死了。这就是s2.append("is good");
但是那杀手为了骗你,把你写的地址该成另一个人的,然后把那个人干掉。也就是s1 = new StringBuffer("sss");等你去看的时候,你要干掉的仇家还是好好的在那里。
多谢楼上的朋友帮忙,非常感谢,忘能继续帮忙!(小弟刚入行)
这句在test方法里面new了一个对象,就是说他是和main函数脱离关系的另一个对象
java中全是按值传递的,当参数是对象时调用该对象的方法可以改变对象的属性,但不可能改变整个对象,即不能使对象指向另一个对象。
public static void test(StringBuffer s1,StringBuffer s2){
//
s1 = new StringBuffer("sss");
//
}
对于
s1 = new StringBuffer("sss");和简单类型的值传递是一样的.就象:
int i = 0;
method(i){
i = 1;
}
在执行了method后i的值还是0
s1 = new StringBuffer("sss"); //这句话相当于没有就好理解了。
s2.append("is good");
}
test(stra,strb);
public static void test(StringBuffer s1,StringBuffer s2){
//
s1 = new StringBuffer("sss");
//
}
对于
s1 = new StringBuffer("sss");和简单类型的值传递是一样的.就象:
int i = 0;
method(i){
i = 1;
}
在执行了method后i的值还是0老兄,这两个不一样的道理好不好
这句在test方法里面new了一个对象,就是说他是和main函数脱离关系的另一个对象这种解释最简单而又合适。java中的参数 有时是传值 ,有时是传 引用,得具体情况具体分析……