Java值传递和引用传递
2015-11-04 21:14
447 查看
在Java中,如果参数是简单类型,那么传递的就是值,比如int、char等等;如果参数是对象类型(引用类型),那么传递的就是地址(引用)。看下面的例子。
package hello1; /** * Created by hyuan on 9/28/15. */ public class hello1 { public static void main(String[] args) { StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); m(a,b); System.out.println(a+","+b); String aa="A"; String bb="B"; m(aa,bb); System.out.println(aa+",,,"+bb); } public static void m(StringBuffer x,StringBuffer y){ x.append(y); y=x; System.out.println(x + ",," + y); } public static void m(String x,String y){ x="aa"; y=x; System.out.println(x+",,"+y); } }
结果为:
AB,,ABAB,Baa,,aaA,,,B
由于这里函数的参数是2个StringBuffer对象,是对象类型,因此应该传递的是地址(引用)。但是应该注意x指向a所指向的内存(可以理解为都指向A),y指向b所指向的内存(可以理解为都指向B),x.append(y);把 y 指向的值追加给x指向的值,这个时候x和a所指向内存的内容都是AB,y指向的内存仍然是B。y=x;把 x 的值赋值给y,赋的是地址,从而导致y、x和a所指向内存的内容都是AB(y原来指向的,也就是b指向内存中的内容并没有发生变化)。因此,a、y、x同时指向AB,而b仍然指向B。System.out.println(x+","+y);这里所以打印AB,AB,打印的实际上都是a指向内存的内容。System.out.println(a+","+b);这里所以打印AB,B,由于是引用传递,所以a指向内存的内容在函数中被修改,而b指向内存中的内容没有发生变化。引用传递是把原来的地址(实参)传递给新的变量(形参),原来引用的仍然在那里。
相关文章推荐
- java基础知识
- java基础-选择排序
- 根据二叉树前序遍历和中序遍历的结果,重建出该二叉树并后序遍历之 java代码
- Java I/O流操作(二)---缓冲流
- spring动态配置多数据源
- 计数排序算法之Java实现
- javaEE简答题整理
- myeclipse默认servers窗口没显示,及Jsp的默认打开方式设置
- 安装java和Eclipse
- web.xml 通过contextConfigLocation配spring 的方式
- Java中native关键字的使用
- JAVA Collection 常用集合 源码解析
- JAVA格物致知开篇:凡事预则立不预则废
- java 异常处理机制
- struts2拦截器
- springMVC 乱码解决问题
- 基于mvc模式的应用框架之struts2(一)----开发入门
- 基于Tire树和最大概率法的中文分词功能的Java实现
- Javac编译原理
- java获取错误行号和方法名类名等信息