当方法参数是“对象”时的深刻理解
来源:互联网 发布:约德尔战斗学院淘宝 编辑:程序博客网 时间:2024/05/10 22:02
今天编写TCP/IP的实验代码发现了一个很有意思的事情,有关于Java参数传递的。
这个输出结果是什么呢?还是1,4,
问题不难,就是跟c++容易混,所以一块讲了。
众所周知,当一个变量当做 参数 传递给一个方法时,通常的做法是不改变 方法外面 变量 的值 。
但是在c、c++里不同,举例说明:
void set(int &s);int main(){int c = 1;int &d = c;cout<<c<<endl;set(c);cout<<c<<endl;return 0;}void set (int &s){s = 4;}
结果是 :
1
4
因为 s 是 c 的引用,对 s 的修改等同于对 c 的修改 // 这个有疑问的话一定要好好补补。
当然这是简单类型,但是即使是复杂类型,在 c 、c++中也是如此。
java中呢
public class tttt {public static void main(String[]args){tttt t = new tttt();t.set(); }public void set(){dgSocket dg = new dgSocket();dg.num = 1;System.out.println(dg.num);setdg(dg);System.out.println(dg.num);}void setdg(dgSocket dg){dg.num = 4;}}class dgSocket{public int num;}
这个输出结果是什么呢?还是1,4,
也就是说传递过去的是引用!
这也就是java 和 c++ 最大的不同之一。
简单类型直接传值(简单类型没有引用),而复杂的类型全部都是引用,实际上我们根本无法获取对象,我们能获取的只是一个对象的引用而已。
说到这里,我今天遇到的问题有些搞笑了,我再 setdg 里面加了一句 dg = new dgSocket();
结果呢,我自以为的 1,4 并没有发生,好像没有执行过一样,结果是 1,1
那么结尾能得到什么启发呢?
你可以改变一个引用内部的值,但你永远不要指望通过一个方法,让传递过来的引用能够指向另一个对象!无论是Java还是C++
- 当方法参数是“对象”时的深刻理解
- 9.深刻理解临时对象的来源
- 深刻理解 js对象间的赋值
- SVM通俗和深刻的理解方法
- 深刻理解贝叶斯方法
- 深刻理解jquery对象和普通对象的区别
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 深刻理解JavaScript基于原型的面向对象
- 深刻理解JavaScript基于原型的面向对象
- 深刻理解JavaScript基于原型的面向对象
- 深刻理解JavaScript基于原型的面向对象
- 深刻理解JavaScript基于原型的面向对象
- 句柄的深刻理解
- Layout_weight的深刻理解
- 关于jQuery中isNumeric 方法判断数字的深刻理解
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- django学习笔记(二):Django开发项目的创建(开发环境而非正式发布环境)
- CSV规范
- 库操作相关
- 用GCC来跟踪程序的函数调用关系
- Android成长之路-布局详解
- 当方法参数是“对象”时的深刻理解
- 资料: vs2003IDE操作
- ubuntu中安装配置lyx xetex
- 对硬盘文件进行二分查找
- JDK1.6官方下载_JDK6官方下载_JDK1.6API(chm)下载_JDK6APICHM中文参
- Socket异步1
- 新浪微博Android版 登录之Logo欢迎页
- 关于MySQL
- Apache Commons DbUtils 快速上手