Java中参数传递探究
来源:互联网 发布:修复tf卡数据 编辑:程序博客网 时间:2024/06/06 02:37
Java中的参数传递,《Java编程思想》是这样解释的:
目前存在两种存在明显区别的见解,其间的分歧归根到底是由于对“句柄”的不同解释造成的:
(1) Java 按值传递任何东西。若将基本数据类型传递进入一个方法,会明确得到基本数据类型的一个副本。但若将一个句柄传递进入方法,得到的是句柄的副本。所以人们认为“一切”都按值传递。
(2) Java 主要按值传递(无自变量),但对象却是按引用传递的。得到这个结论的前提是句柄只是对象的一个“别名”,所以不考虑传递句柄的问题,而是直接指出“我准备传递对象”。由于将其传递进入一个方法时没有获得对象的一个本地副本,所以对象显然不是按值传递的。
所以,这本业界圣书的作者也说:我打算在本书剩下的部分里回避这个问题。大家不久就会知道,这个问题争论下去其实是没有意义的。
结论:
①存在上述两种见解,其原因是所站角度不同导致的。但是,Sun公司似乎在某种程度上更支持第二种见解。
②基本数据类型是值传递,传入函数的是该数据的副本;同样,引用数据类型传入函数的是这个引用的副本。
案例:
public class Example{ String str=new String("hello"); char[]ch={'a','b'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+" and "); System.out.print(ex.ch); } public void change(String str,char ch[]){ str="test ok"; ch[0]='c'; }}分析:change函数中的str是ex.str这个引用的副本,这个引用副本指向的对象变为"test ok"不会的ex.str产生任何影响;同样,change函数中的ch也是ex.ch这个引用的副本,二者指向的是同一块内存,函数中ch[0]='c'这一操作就把内存中的值变成了'c'。所以最终输出的结果是:
hello and cb
那么如果我们修改change函数,修改后如下:
public void change(String str,char ch[]){ str="test ok"; ch =new char[]{'A','B', 'C'}; }程序执行后的结果就是
hello and ab
阅读全文
1 0
- Java中参数传递探究
- 【Thinking In Java】Java参数传递探究
- 探究java方法参数传递--引用传递?值传递!
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- java中参数传递
- Java 方法中参数传递
- java中参数的传递
- java中参数的传递
- java中参数的传递
- Java中参数传递机制
- Java中参数传递问题
- Java中参数传递问题
- Java中参数的传递
- java中参数传递问题
- AddressSanitizer算法及源码解析
- python核心高级学习总结4-------python实现进程通信
- 百练_4095:打字员
- C++Primer学习笔记(一):cin与cin.get()
- 玄宇说:简单的VTemplate模板引擎的使用
- Java中参数传递探究
- JS For应用!
- scala代码风格指南--<命名规范>
- mac OS 使用SVN命令行工具报 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- 百练_4096:信号转换
- 关于Promise,Generator,async / await 对异步的处理
- Mysql半同步复制详细配置
- Unity3D 利用Highlighing System插件使物体轮廓高亮显示
- java用户metadata-extractor读取照片信息错误Exception in thread “main” java.lang.NoClassDefFoundError: com/adobe