黑马程序员技术交流社区
标题:
java值传递和地址传递的问题
[打印本页]
作者:
张甲甲
时间:
2013-5-16 21:23
标题:
java值传递和地址传递的问题
public class Foo {
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a+","+b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}
为什么结果会是AB,B呢?public class Test{
public static void main(String args[]){
Date d=new Date();
System.out.println(d);
modify(d);
System.out.println(d);
}
public static void modify(Date d1){
d1=null;
}
}
为什么这样就改变不了d 的值呢?
作者:
chouwayメ
时间:
2013-5-16 22:17
public class Foo {
public static void main (String [] args) {
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
operate (a,b);
System.out.println(a+","+b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append(y);/*append()是对StringBuffer对象进行添加动作,这改变了对象的内容了。所以使得打印 指向该对象的引用变量时 输出发生改变了。*/
y = x;//形参的改变不影响实参所指向的地址,而且此时实参B所指向的对象内容没发生改变,所以打印输出就没改变喽。
}
}
复制代码
下面的d1同理哦 形参d1只是变成空 不指向谁而已 这和实参没啥关系 两者不发生值传递。
(有什么不妥 ,请指正。。。)
作者:
breeze
时间:
2013-5-18 08:41
static void operate (StringBuffer x, StringBuffer y) {
x.append(y); //这里是操作了对象本身, 所以内存中的对象内容, 这时改变了, 方法执行完, 内容已经发生了变化, 所以是AB
y = x; //这里是操作了对象的引用, 对象本身没有变, 只是引用变了, 方法执行过后会消失, 所以引用也随之消失(因为y只是个形式参数), 所以还是B
}
下面的modify方法也是一样的, 因为只是栈空间中的引用改变了(方法是在栈内执行的), 方法结束后就消失了, 所以还是原来的引用指向原来的对象
作者:
曹睿翔
时间:
2013-5-19 07:47
如果问题已解决请再次编辑,改为以解决,方便大家看帖,没有就继续追问
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2