请高手帮我解释解释!一定给分! public void changeObjValue (PassTest ref) { 15 ref.ptValue = 99.0f; 16 } 改变了pt.ptValue 的值,因为它直接对地址操作,其它只是改变了引用的数值 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这段话的意思就是:java进行参数(原始数据类型)传递时,被调用方法得到的只是原变量的一个值拷贝,因此它的只能对这个拷贝进行操作,当然就不能改变原变量的值了。但如果参数是对象,则被调用方法得到的是原对象的一个引用,因此它就能通过该引用对原对象进行操作,所以原对象的内容也就可以在被调用方法中改变了。对象的引用实际上是一个指针,如果被改变了那它所指向的对象不久改变了么??例子里面的字符串对象是个特殊例子,在这里把它当作原始数据类型。这样解释不知道你明白没?? java是传递对象的引用,当调用changeObjValue()时,传进pt的引用,他所指的对象与外面的pt实际上是同一个。你用pt.ptValue=99.0时,实际已经改变了外面的ptValue了。而在另外的changStr()你用value=“”;实际上是把这个引用指向“”而已。他原来也是指向“”的。一个与changeObjValue相同的例子。BufferString bs=new BufferString("qqqq");changeBufferString(BufferString point){ point.append("wwwww");}调用changeBufferString(bs)这个函数后bs的值为qqqqwwww。因为point也是指向bs对象的,在函数里添加了字符。 二位说的我看明白一些,很有启发,但是那该怎么判断传递的是一个对象还是一个参数呢?是不是所有原始数据类型都可以看做是参数而不是对象?在本例中,是不是27 val = 11;36 str = new String ( " hello " ); 呵呵,它们是不是只是一个变量啊?而45 pt.ptValue = 101.0f;是一个对象?是不是可以说,凡是对对象的引用都可以理解为指针?谢谢! jgo(航海家) 您所说的传递对象的引用是不是说: 45 pt.ptValue = 101.0f; 对象PT引用了ptValue,所以 50 pt.changeObjValue (pt);实际上传递的是ptValue?方法里面修改的也就是它了?那么 36 str = new String ( " hello " ); 是不是说STR引用的是一个空字符?或者是"hello"的地址?如果是地址,我不明白那里面不就等于修改了地址吗? 我不知道 11 value = new String ( " different " );和BufferString bs=new BufferString("qqqq");的区别,value不是对象吗?bs是对象的话,它的引用是什么?是"qqqq"吗?谢谢! 如果是基本类型,传递时先拷贝这个值再传过去如果是对象,拷贝这个引用再传过去例如声明了如下函数:void foo(int a);void fooo(Object o);调用时:int s=5;Vector v=new Vector();foo(s); 相当于int a=s; foo(a);fooo(o):相当于Vector vv=v; fooo(vv); vv和v指向同一个对象 java传递的永远是“引用”。还是我的例子。String s="s"; 主要的区别是:你注意看函数里的具体操作。changeS(String sPoint){ sPoint="2";}如果bs的值原来也是“bs";changeBS(BufferString bsPoint){ bsPoint.append("2");}将s与bs传到函数里时,传递了“引用”,也就是sPoint和sbPoint引用了相应的值,即此时sPoint指向了“s",sbPoint指向了”sb"。但是最关键的是:sPoint=“2"的意思是将sPoint又指向了另外一个对象“2";而sPoint是s的一份拷贝,它与s是不同一个对象。所以还是s="s"。再看sbPoint.append("2")的意思是sbPoint所指的对象添加“2"。这样的话由于sbPoint指向对象与sb是同一个。所以调用函数后sb="sb2"。其实是同样的道理 s 与 sPoint指向同一对象 “s"。 sb 与 sbPoint也是指向同一对象 ”sb"。关键的不同是函数里的 = 与 . 这两个操作的性质不同。应该很清楚了吧。欢迎和我讨论。QQ 15549694 求助:用java语句如何得到XML中ELEMENT的值?? 问题编号006:如何解决这种乱码问题? 大家帮帮忙啊。急。。。 新手问题!!关于环境配置!! 急!!jProgressBar1 刷新問題!!!!! SWING求助 又一段不可征程编译的CODE,请多指教! 求助, 怎么做个java代码从腾讯动漫上下载漫画图片 紧急求救:不知道动了那里,我的Eclipse3.0提示出错,见内容... This is a cup of tea的字符串翻转问题...... 关于public? 初学者遇到的问题?
这样解释不知道你明白没??
指的对象与外面的pt实际上是同一个。你用pt.ptValue=99.0时,实际已经改变了外面的ptValue了。而在另外的changStr()你用value=“”;实际上是把这个引用指向“”而已。他原来也是指向“”的。
一个与changeObjValue相同的例子。
BufferString bs=new BufferString("qqqq");
changeBufferString(BufferString point)
{
point.append("wwwww");
}
调用changeBufferString(bs)这个函数后bs的值为qqqqwwww。
因为point也是指向bs对象的,在函数里添加了字符。
那该怎么判断传递的是一个对象还是一个参数呢?是不是所有原始数据类型都可以看做是参数而不是对象?在本例中,是不是
27 val = 11;
36 str = new String ( " hello " );
呵呵,它们是不是只是一个变量啊?
而
45 pt.ptValue = 101.0f;
是一个对象?
是不是可以说,凡是对对象的引用都可以理解为指针?
谢谢!
您所说的传递对象的引用是不是说: 45 pt.ptValue = 101.0f;
对象PT引用了ptValue,所以 50 pt.changeObjValue (pt);
实际上传递的是ptValue?方法里面修改的也就是它了?
那么 36 str = new String ( " hello " ); 是不是说STR引用的是一个空字符?或者是"hello"的地址?如果是地址,我不明白那里面不就等于修改了地址吗?
的区别,value不是对象吗?bs是对象的话,它的引用是什么?是"qqqq"吗?
谢谢!
如果是对象,拷贝这个引用再传过去
例如声明了如下函数:
void foo(int a);
void fooo(Object o);
调用时:
int s=5;
Vector v=new Vector();foo(s); 相当于int a=s; foo(a);
fooo(o):相当于Vector vv=v; fooo(vv); vv和v指向同一个对象
还是我的例子。String s="s";
主要的区别是:你注意看函数里的具体操作。changeS(String sPoint)
{
sPoint="2";
}
如果bs的值原来也是“bs";changeBS(BufferString bsPoint)
{
bsPoint.append("2");
}
将s与bs传到函数里时,传递了“引用”,也就是sPoint和sbPoint引用了相应的值,即此时sPoint指向了“s",sbPoint指向了”sb"。
但是最关键的是:
sPoint=“2"的意思是将sPoint又指向了另外一个对象“2";
而sPoint是s的一份拷贝,它与s是不同一个对象。所以还是s="s"。再看sbPoint.append("2")的意思是sbPoint所指的对象添加“2"。这样的话
由于sbPoint指向对象与sb是同一个。所以调用函数后sb="sb2"。其实是同样的道理 s 与 sPoint指向同一对象 “s"。
sb 与 sbPoint也是指向同一对象 ”sb"。关键的不同是函数里的 = 与 . 这两个操作的性质不同。
应该很清楚了吧。欢迎和我讨论。QQ 15549694