java 值传递和引用传递
来源:互联网 发布:通达信期货软件 编辑:程序博客网 时间:2024/05/11 19:10
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。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 okgood 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 } */ }
0 0
- java中的“值传递”和“引用传递”
- java值传递和引用传递
- java中的值传递和引用传递
- Java中的值传递和引用传递
- Java值传递和引用传递
- Java值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- Java中的值传递和引用传递
- java中的值传递和引用传递
- java--值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- java中的值传递和引用传递
- 商城之热门商品列表实现(下拉刷新,上拉加载更多)
- 微信web开发工具
- Ubuntu 16.04 LTS国内快速更新源
- CentOS7安装Mysql5.7.15
- 第二章
- java 值传递和引用传递
- C语言的fopen函数(文件操作/读写)
- SVN版本服务器搭配全过程详解(含服务端、客户端)
- Android 圆形头像 带阴影 带边界 完整代码
- Webmagic源码分析之运行流程
- Centreon+Nagios实战第二篇——监控端安装Nagios
- 【2016.10.4NOIP普及模拟】Bill
- HDU5920 Ugly Problem (大模拟)
- Java 集合框架分析:LinkedList