我认为SAsura说的不对如果以上程序中的operateMyClass改成如下
public void operateMyClass(MyClass m1,MyClass m2){
m2.x = m1.x;
}则结果为1 1
public void operateMyClass(MyClass m1,MyClass m2){
m2.x = m1.x;
}则结果为1 1
解决方案 »
- 求相关java范例源代码。
- java如何识别文本里的制表符?
- 贪吃蛇的小问题
- SUN的网站上面下载不到Java(tm) Communication API 那位给发一个,马上结贴
- 简述Java具有可移植性的原因?
- 为什么下面代码不能识别汉字?(关于输入输出流)
- 我用File("c:\windows\a.txt")构造File类时出现有不合法的字符的错误
- java程序如何发布(在别的机器上执行)
- 高分悬赏!sql2000 的jdbc驱动
- 在一个frame里打开一个jdialog窗口,当frame切换到别的窗口(比如ie),怎么样在切换回来的时候,同时出现jframe和jdialog,而不是单单是
- 急 指点者一定有分!!!
- 请问哪个中文网站有下载java虚拟机!
public void operateMyClass(MyClass m1,MyClass m2){
m2.x = m1.x;
}则结果为1 1java中所有的参数传递实质上都是值传递。
上面的例子中当t1、t2传到operateMyClass时,系统会复制t1和t2的地址值给新的参数m1、m2,
这样m2.x实质上访问访问t1.x。
public void operateMyClass(MyClass m1,MyClass m2){
m2x = m1x;
}相当于c中 public void operateMyClass(MyClass *m1,MyClass *m2){
m2 = m1;
}当然不能改变实参了
说java中所有的参数传递实质上都是值传递有些不好理解。
谢谢诸位了。
如果有人能说得更清楚欢迎讨论。
public void operateMyClass(MyClass m1,MyClass m2){
m2.x = m1.x;
}
你这样操作的时候,在对象的地址上是利用的传值调用。在函数里面相当如产生一个新的对象引用。指向你传过来的哪个对象,你对这个对象的操作都是有效的。但是当函数返回的时候,这个新的对象引用就会被销毁。这样就看到你所说的现象了。
Java中肯定是通过值传递的,然而当一个引用类型被涉及的时候,这个被传递的值是个引用,但是这个和通过引用传递又不同了,如果Java是一个通过引用进行传递的语言,那么当一个引用类型被传递给一个方法的时候,它将被作为一个指向引用的引用来传递!
public void operateMyClass(MyClass m1,MyClass m2){
m2.x = m1.x;
}
你这样操作的时候,在对象的地址上是利用的传值调用。在函数里面相当如产生一个新的对象引用。指向你传过来的哪个对象,你对这个对象的操作都是有效的。但是当函数返回的时候,这个新的对象引用就会被销毁。这样就看到你所说的现象了。这个解释不对!
这个地方肯定不是建立一个新的对象引用再销毁的!按道理肯定是传的原来对象的引用!