java 值传递和引用传递
2016-10-04 20:43
357 查看
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。Java中有人分为值传递和址传递。引用传递也就是址传递。
比如下列的方法
public void add(int a) {
int b = a;
}
这个可以看作是值传递,a是基本数据类型,他把他的值传给了b
public void add(Object obj) {
Object objTest = obj;
}
这个可以看作是址传递,obj是引用数据类型,是把他栈中指向堆中的对象的地址值赋值给了objTest.
这时候就同时有两个引用指向了堆中的某个Object对象
其实这样看来,java应该只有值传递的。如果是基本数据类型,传递的就是实际的值.
如果是引用数据类型,传递的就是该引用的地址值.
PS 原始类型和引用类型
原始类型也叫做基本类型,java只有8种基本类型,分别是byte,short,int,long,float,double,char,boolean。 引用类型是自己定义的类对象。 主要区别有,基本类型是在堆栈上进行内存分配,引用类型堆栈上只有引用,内存分配在堆上, 属于动态分配。基本类型不可以调用方法,但是可以使用基本类型的包装器来调用。
下面看下这个经典的案列
package itany.test; /** * Created by ls on 2016/10/4. */ public class Example { String str=new String("good"); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); // ex.change(); System.out.print(ex.str+" and "); System.out.print(ex.ch); } /* public void change(String str,char ch[]) { str = "test ok"; //这里的str,指向的是形参的引用副本 System.out.println(str); //这里的str是局部变量,指向的形参的引用副本 ch[0] = 'g'; 运行结果 test ok good and gbc //在输出的时候却不会调用对象的引用副本 } */ //和上面方法比较 形参str -> str2 public void change(String str2,char ch[]) { str = "test ok"; //这个是直接给全局变量str赋值,并未指向向形参str2的引用副本 System.out.println(str2); System.out.println(str); //这里的str是全局变量 ch[0] = 'g'; // 运行结果 // good // test ok // test ok and gbc } /* public void change(String str3,char ch[]) { str3 = "test ok"; // 对象调用的还是引用,并非引用的副本 ch[0] = 'g'; //输出 good and gbc } */ /* public void change() { str = "test ok"; //这里就只直接给全局变量赋值 ch[0] = 'g'; //输出 test ok and gbc } */ }
PSS:如有不妥之处,还望指正。
相关文章推荐
- Java语言中的值传递与引用传递
- JAVA 值传递与引用传递详解
- 【java】值传递和引用传递理解
- java中的值传递以及(址)引用传递实例
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java到底是按值传递还是按引用传递?
- 【java】值传递和引用传递理解
- java的值传递和引用传递(能力不行,翻译不准,欢迎纠错)
- Java中函数参数的传递是值传递还是引用传递
- java 值传递和引用传递
- java到底是按值传递还是按引用传递?
- Java中到底是值传递还是引用传递?
- 【转】java到底是按值传递还是按引用传递?
- Java 值传递与引用传递
- java中的值传递与引用传递
- java的值传递和引用传递问题
- java 值传递和引用传递
- Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递
- Java的值传递和引用传递
- Java的值传递与引用传递