值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

//按值传递

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中按值传递与按引用传递的区别的更多相关文章

  1. 关于Java中按值传递和按引用传递的问题详解

    写了两个方法,一个是多关键字的快速排序,一个是基于多关键字的基速排序.两个方法的参数列表是一样一样的,但是快速排序正常工作,但是基数排序传出来的参数一点没有改变,苦思冥想了半天也没想通是怎么回事,于是 ...

  2. Java的按值传递和按引用传递解说

    在网上看到的一个帖子解释Java的按值传递和按引用传递,感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...

  3. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  4. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  5. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  6. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  7. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  8. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  9. Java中Long与long的区别(转)

    Java中Long与long的区别(转) [本文转载自:http://www.cnblogs.com/bluestorm/archive/2012/04/22/2464739.html] 转载请联系原 ...

随机推荐

  1. transform动画的一个3D的正方体盒子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. mongo数据集合属性中存在点号(.)

    基本知识点: 1.似乎mongo3.6之前不允许插入带点(.)或美元符号($)的键,但是当我使用mongoimport工具导入包含点的JSON文件时,它工作正常. 2.在使用spring-data-m ...

  3. 客户端与服务器交互中的Token

    Token:在计算机身份认证中是令牌(临时)的意思,类似于 MD5 加密之后的长字符串 特点:1.随机性,不可预测  2.具有有限期 3.唯一 作用:1.防止重复提交  2.防止CSRF(跨站请求伪造 ...

  4. nginx 开启phpinfo

    在nginx配置文件中加 location / { //如果是资源文件,则不走phpinfo模式 if (!-e $request_filename){ ewrite ^/(.*)$ /index.p ...

  5. pci枚举初始化部分(2)

    1.2.8判断pcie设备是否支持雷电技术 Intel具有一种基于Thunderbolt技术的PCIE变体,它结合了DisplayPort和PCIe协议,与Mini DisplayPort兼容. Th ...

  6. ECShop全系列版本远程代码执行漏洞复现

    前言 问题发生在user.php的display函数,模版变量可控,导致注入,配合注入可达到远程代码执行 漏洞分析 0x01-SQL注入 先看user.php $back_act变量来源于HTTP_R ...

  7. C语言——第一章,程序设计和C语言

    第一章,程序设计和C语言 一,程序和程序语言 程序:完成某项事物所预设的活动方式和活动过程 程序设计:人们描述(指程序)计算机要做的工作 程序设计语言及发展 1,机器语言    2,汇编语言    3 ...

  8. 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

    以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...

  9. Go语言的包管理

    1 概述 Go 语言的源码复用建立在包(package)基础之上.包通过 package, import, GOPATH 操作完成. 2 main包 Go 语言的入口 main() 函数所在的包(pa ...

  10. 【 C 】高级字符串查找之 strspn 和 strcspn 的思考

    我的CSDN博客 strspn 这个库函数是真的很难理解,看了很多中文描述,反正都是不知所云,给出一系列的例子,结果也是让我瞠目结舌,荒唐.荒谬.荒诞! 特此记录理解过程,最后竟然是百度百科让我明白了 ...