博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java是值传递,还是引用传递?
阅读量:5021 次
发布时间:2019-06-12

本文共 1089 字,大约阅读时间需要 3 分钟。

原文地址:http://blog.csdn.net/zxmzfbdc/article/details/5401960

   java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于《Practical java》等书籍的引入,现在大家都知道java是严格的值传递,基本数据类型不会有什么问题,但是针对对象和数组,执行的结果,似乎应该是引用传递。

   在《Practical java》中,给出了说明,针对对象和数组,事实上,传递的内容,是引用的值,而不是引用本身。但是怎么验证,网上没有例子,书上也没有给,现在给出一个 例子,可以很好的说明,java确实是值传递。例子如下:

  1. public class Test{  
  2.     public void c(Model m1, Model m2){  
  3.         Model m = m1;  
  4.         m1 = m2;  
  5.         m2 = m;  
  6.     }  
  7.     public void cd(int[] a, int[] b){  
  8.         int[] c = a;  
  9.         a = b;  
  10.         b =c;  
  11.     }  
  12.     public static void main(String[] args){  
  13.         Model m1 = new Model();  
  14.         m1.setName("m1");  
  15.         Model m2 = new Model();  
  16.         m2.setName("m2");  
  17.         Test app = new Test();  
  18.         app.c(m1, m2);  
  19.         System.out.println(m1.getName()+"---" + m2.getName());  
  20.         int[] a = new int[]{
    1};  
  21.         int[] b = new int[]{
    2};  
  22.         app.cd(a, b);  
  23.         System.out.println(a[0] + "----" + b[0]);  
  24.     }  
  25. }  
  26. class Model{  
  27.     private String name;  
  28.     public void setName(String name){  
  29.         this.name = name;  
  30.     }  
  31.     public String getName(){  
  32.         return name;  
  33.     }  
  34. }  

 

  打印的结果是

 
  1. D:/ > java Test  
  2. m1---m2  
  3. 1----2  
 

   这是因为,m1和m2本身是对象的引用没错,但是传入方法c的参数,实际上是m1和m2的副本,因此只是两个副本进行了交换,而m1和m2本身并没有被交 换。交换数组的方法cd,原理与之相同。

转载于:https://www.cnblogs.com/m-xy/p/3224631.html

你可能感兴趣的文章
UVALive 4730 Kingdom +段树和支票托收
查看>>
[APIO2010]特别行动队
查看>>
[SCOI2016]幸运数字
查看>>
SpringBoot 集成ehcache
查看>>
初步swift语言学习笔记2(可选类型?和隐式可选类型!)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
查看>>
在Macos下完美解决Adobe Dreamweaver CC 2018 汉化及操作方法
查看>>
【转】 Newtonsoft.Json高级用法
查看>>
CodeBlocks X64 SVN 编译版
查看>>
Excel催化剂开源第42波-与金融大数据TuShare对接实现零门槛零代码获取数据
查看>>
bug记录_signalr执行$.connnection.testhub结果为空
查看>>
【转】常用的latex宏包
查看>>
[TMS320C674x] 一、GPIO认识
查看>>
酷狗的皮肤文件存放在哪
查看>>
iOS RunLoop简介
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>