Java中按值传递与按引用传递的区别
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

//按值传递
public class shiyan {
//先创建一个更改变量的函数,并加上了打印的函数用于比较
public void change(int c){
c=c*5;
System.out.println(c);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int p=5; //先声明一个变量p=5
shiyan c=new shiyan(); //创建对象c
//利用c的成员函数改变p值,使p=p*5
c.change(p);
//输出的是理想值25
System.out.print(p);
//奇怪输出的是5
}
}
输出结果:25 5
分析:这就是按值传递的效果,因为此时传入的不是p本身,只是p的值,传递的是p本身的是副本。
所以打印出的是(p副本的值)的改变结果25,而后一个打印出的是p的真身没有改变过因此是5
//按引用传递
package yinyong;
//先定义一个学生类
public class Student {
//设计重载构造函数,为了后面的演示方便
public Student(){ }
//用于取名的构造函数
public Student(String p){
name=p;
}
//用于改名的的函数,不过得改成别人的名字
public void changName(Student p){
this.name=p.name;
} public String name; }
package yinyong;
public class teacher {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建a这个人给a学生取名李明
Student a=new Student("李明");
//创建b这个人给b学生取名赵明
Student b=new Student("赵明");
//创建c这个人,还未起名
Student c=new Student();
//分别输出a,b两个人的名字
System.out.println("a同学名字是"+a.name);
System.out.println("b同学名字是"+b.name);
//将c人的名字指向b,实质是将b的地址赋给c,这样c,b同指一片内存区域
c=b;
System.out.println("c同学名字是"+c.name);
//果然c的名字变为了赵明
b.changName(a);
//利用改名函数改变b的名字,将a对象传入将a的名字赋给b
System.out.println("b同学名字是"+b.name);
//结果是a的名字李明
}
}
输出:a同学名字是李明
b同学名字是赵明
c同学名字是赵明
b同学名字是李明
分析: 由于是按引用调用所以,传递的时候时刻都是把对象的真身传递过去,并且可以改变真身的属性和方法。传递时时候也把真身的地址传了过去,这样引用时就指向了同一片地址内存空间。
Java中按值传递与按引用传递的区别的更多相关文章
- 关于Java中按值传递和按引用传递的问题详解
写了两个方法,一个是多关键字的快速排序,一个是基于多关键字的基速排序.两个方法的参数列表是一样一样的,但是快速排序正常工作,但是基数排序传出来的参数一点没有改变,苦思冥想了半天也没想通是怎么回事,于是 ...
- Java的按值传递和按引用传递解说
在网上看到的一个帖子解释Java的按值传递和按引用传递,感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java中this与super的区别【6】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- Java中Long与long的区别(转)
Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...
随机推荐
- 一图看懂hadoop Spark On Yarn工作原理
hadoop Spark On Yarn工作原理
- 树莓派3B+学习笔记:7、挂载exfat格式U盘
树莓派的官方系统,默认不支持exfat格式U盘挂载. 插入exfat格式U盘会出现以下错误提示: 安装exfat-fuse后可以正常识别,需要在命令行执行以下命令,按“y”键回车确认: sudo ap ...
- 用例程解释create_singlethread_workqueue与create_workqueue的区别
用例程解释create_singlethread_workqueue与create_workqueue的区别 系统版本:linux3.4 使用create_singlethread_workqueue ...
- 使用docker-compose运行微服务项目#eureka+config+auth+gateway+module
微服务架构中我们使用了必须的四个组件,eureka config gateway auth 其中config依赖eureka,auth依赖前两者,gateway又依赖auth 这样就确定了四个组件的启 ...
- SOC中的DFT和BIST对比与比较-IC学习笔记(二)
ATE:ATE是Automatic Test Equipment的缩写,根据客户的测试要求.图纸及参考方案,采用MCU.PLC.PC基于VB.VC开发平台,利用TestStand&LabVIE ...
- Creating Isomorphic Apps with Node.js, React, and Express
In this article, we’re going to use following software: React: the UI framework that can rendered on ...
- PostgreSQL参数学习:vacuum_defer_clean_age
官方文档: http://www.postgresql.org/docs/9.3/static/runtime-config-replication.html 为了防止slave端读取数据时,因为读到 ...
- day 9 名字管理系统
1 while True ##### 布尔值:True or False In [8]: a = 19 In [6]: a > 18 Out[6]: True In [7]: a < 18 ...
- 【CF833D】Red-Black Cobweb
[CF833D]Red-Black Cobweb 题面 洛谷 题解 看到这种统计路径的题目当然是淀粉质啦. 考虑转化一下信息设一条路径上有红点\(a\)个,黑点\(b\)个 则\(2min(a,b)\ ...
- kobject和kset的一些学习心得
#include <linux/module.h> #include <linux/kernel.h> #include <linux/kobject.h> #in ...