将对象传递给方法,如何理解?
class Test
{
int a,b; Test(int i,int j)
{
a = i;
b = j; }void meth(Test o) //这句,还有别的写法吗?如何理解?
{
o.a *= 2;
o.b /= 2; }
}
class CallByRef
{
public static void main(String args[])
{
Test ob = new Test(15,20); System.out.println("ob.a and ob.b before call: " +ob.a + " " + ob.b); ob.meth(ob); System.out.println("ob.a and ob.b after call: " +ob.a + " " + ob.b);
}
}
void meth(Test o) //这句,还有别的写法吗?如何理解?说详细一点,谢谢
class Test
{
int a,b; Test(int i,int j)
{
a = i;
b = j; }void meth(Test o) //这句,还有别的写法吗?如何理解?
{
o.a *= 2;
o.b /= 2; }
}
class CallByRef
{
public static void main(String args[])
{
Test ob = new Test(15,20); System.out.println("ob.a and ob.b before call: " +ob.a + " " + ob.b); ob.meth(ob); System.out.println("ob.a and ob.b after call: " +ob.a + " " + ob.b);
}
}
void meth(Test o) //这句,还有别的写法吗?如何理解?说详细一点,谢谢
解决方案 »
- JavaSwing的JTextArea如何获得光标的位置
- 父类方法中声明了异常类,子类重写时要声明吗?
- 关于一个类调用另一个类的问题
- 一个初级问题 - 编译错误
- heritrix 种子选择 如何选择能抓到最全的数据!!
- 高手都去哪里了呀?这里有高手吗?我都给15分啦!快来呀!一定给分的!
- jdbc中sql语句是否可以使用这样的参数方式,如select * from a where id=:id
- 有谁既会AWT又会SWING的?
- java 如何获得程序执行到某个地方的地址??
- Tomcat4.03启动后,没有报错,但http://localhost:8080/不能正常工作,为什么?(在线关注)
- 请问iterator 中文是什么意思?
- [求助]安装j2sdk出现1335错误,怎么解决?
===============
这个问题本身提的就有问题?你最常用的public static void main(String args[])不也是将对象传递给方法吗??你要问的是:在对象内将对象传递给对象本身的方法
不过这个也不是问题啊,jdk里面String类中的public int indexOf(String str)方法不和你这个例子一样么?
也就是
ob.a *= 2;
ob.b *= 2;
如果只针对本对象的话,方法可以改为:
void meth()
{
a *= 2;
b /= 2;
}不是特殊情况没必要用void meth(Test o),来控制本类的其他对象
o.a *= 2;
o.b /= 2;
}
java中参数传递都是传值的;
如果是基本类型是传送基本类型的值的拷贝;如果是对象类型是传递对象地址的拷贝;在这方法中Test o 是形参,而类CallByRef的ob.meth(ob);的obj是实参; ob指向Test对象,o是ob的拷贝,也指向这个Test对象 没有问题了