java中的参数传递
2015-09-08 23:10
411 查看
今天看了一篇java中值传递和引用传递的帖子,发帖时间是2007年的,帖主的观点是引起了不少观众的争议,下面说说自己对java参数传递的看法。
1.首先,java中没有引用传递一说,只有值传递。
参数传递分两种,一种是基本类型、一种是对象类型
基本类型自然是int等类型,对象类型是String或者自定义对象
下面我们分开来讲
基本类型传递
变量b的值为1,传递给changeValue方法中的形参a,那么形参a的值就会在内存中保有一个值为1的内存空间,
此时形参a和变量b是两个完全不相干的东西,所以方法changeValue中改变了形参的值为10之后,在方法外部打印变量b的值照样是1.
对象类型传递
对象传递也是值传递,并不是所谓的引用传递。在传递过程中,传递的就是对象在内存中的地址。像下面代码中
定义了变量li,指向了堆中的某个对象,那么在调用方法changeValue的时候,虚拟机会把变量li所指向的地址复制给形参list,
这时候变量li和形参list实际上操作的是同一个对象。所以在方法changeValue中往List中新增了元素也会改变变量li所指向的对象,
因为两个参数操作的是同一个对象。
但是如果在changeValue方法内部中把形参重新指向了另外一个对象,那么这时候两个变量就分别指向了两个不同的对象。
就想下面代码中的
1.首先,java中没有引用传递一说,只有值传递。
参数传递分两种,一种是基本类型、一种是对象类型
基本类型自然是int等类型,对象类型是String或者自定义对象
下面我们分开来讲
基本类型传递
变量b的值为1,传递给changeValue方法中的形参a,那么形参a的值就会在内存中保有一个值为1的内存空间,
此时形参a和变量b是两个完全不相干的东西,所以方法changeValue中改变了形参的值为10之后,在方法外部打印变量b的值照样是1.
对象类型传递
对象传递也是值传递,并不是所谓的引用传递。在传递过程中,传递的就是对象在内存中的地址。像下面代码中
定义了变量li,指向了堆中的某个对象,那么在调用方法changeValue的时候,虚拟机会把变量li所指向的地址复制给形参list,
这时候变量li和形参list实际上操作的是同一个对象。所以在方法changeValue中往List中新增了元素也会改变变量li所指向的对象,
因为两个参数操作的是同一个对象。
但是如果在changeValue方法内部中把形参重新指向了另外一个对象,那么这时候两个变量就分别指向了两个不同的对象。
就想下面代码中的
相关文章推荐
- Java简单万年历
- [笔记][Java7并发编程实战手册]4.11-4.12在执行器中分离任务的启动和结果的处理和处理在执行器中被拒绝的任务
- 搭建Android开发环境(eclipse)
- 配置eclipse4ee
- JAVA基础
- Ehcache是现在最流行的纯Java开源缓存框架
- java中有关异常处理的问题
- String.Format大全(C# Java)
- mybatis报错 There is no getter for property named 'xx' in 'class java.lang.String
- java日志需要知道的几件事(commons-logging,log4j,slf4j,logback)
- Java try、catch、finally及finally执行顺序
- JAVA学习笔记之数据类型
- eclipse ibatis abator插件
- java 面向对象思想
- java String类分析
- java 集合
- JAVA 多线程
- java中的连接池
- 配置NotePad++ 的java 开发环境
- JAVA IO