欢迎来到天天文库
浏览记录
ID:41028601
大小:32.00 KB
页数:5页
时间:2019-08-14
《JAVA里面方法调用时传对象参数的陷阱的防止》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JAVA里面方法调用时传对象参数的陷阱的防止 其实问题的核心,就是参数虽然是传的引用,但参数就是参数,他自身是一个本地的局部引用而已,只不过在这个时刻和调用者指向了同一个对象。但并不代表这个局部引用在整个方法调用期间内能始终和调用者保持一致。 下面是2个测试,分别测试可修改的Object和不可修改的 /** *JAVA里面对象参数的陷阱 */ publicclassTest{ publicstaticvoidmain(String[]args){ TestValuetv=newTestValue(); tv.first(); TestIntegerti=ne
2、wTestInteger(); ti.first(); } } classTestValue{ classValue{ publicinti=15; } //初始化 Valuev=newValue(); publicvoidfirst(){ //当然是15 System.out.println(v.i); //第一次调用 second(v); System.out.println(v.i); third(v); System.out.println(v.i); } publicvoidsecond(Valuev){ //此时这里的v是一个
3、局部变量 //和类属性的v相等 System.out.println(v==this.v); v.i=20; } publicvoidthird(Valuev){ //重新设置一个对象 v=newValue(); //此时这里的v也是一个局部变量 //但和类属性的v已经不相等了 //修改这个v指向对象的数值,已经不影响类里面的属性v了。 System.out.println(v==this.v); v.i=25; } } classTestInteger{ //初始化 Integerv=newInteger(15); publicvoidfi
4、rst(){ //当然是15 System.out.println(v); //第一次调用 second(v); System.out.println(v); third(v); System.out.println(v); } publicvoidsecond(Integerv){ //此时这里的v是一个局部变量 //和类属性的v相等 System.out.println(v==this.v); //但这一句和前面的不同,虽然也是给引用赋值,但因为Integer是不可修改的 //所以这里会生成一个新的对象。 v=20; //当然,他们也不再相等
5、 System.out.println(v==this.v); } publicvoidthird(Integerv){ //重新设置一个对象 v=newInteger(25); //此时这里的v也是一个局部变量 //但和类属性的v已经不相等了 //修改这个v指向对象的数值,已经不影响类里面的属性v了。 System.out.println(v==this.v); } } 运行结果 15 true 20 false 20 15 true false 15 false 15 希望这个例子能解开一些初学者的疑问。更多信息请访问:大家论
6、坛
此文档下载收益归作者所有