Java学习(五)---java值传递
来源:互联网 发布:淘宝秒杀最准的时间 编辑:程序博客网 时间:2024/05/15 16:32
1、按值调用(call by value)表示方法接收的是调用者提供的值。
按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。
2、一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
3、java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值得一个拷贝,特别是,方法不能修改传递给他的任何参数变量的内容。
4、实现一个改变对象参数状态的方法并不是一件难事。理由很简单,方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。
—摘自《Java核心技术》
如何理解上面的几句话,我们需要搞清楚下面几个问题?
一、搞清楚基本数据类型和引用数据类型的不同之处?
int age = 21;String name = "Peter";
如上图所示:
age是基本数据类型,所以值就直接保存到变量中。
而name是引用数据类型,所以变量中保存的只是实际对象的地址。一般称这种变量为”引用”,引用指向实际对象,实际对象中保存着内容。
引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量
二、搞清楚赋值操作=的作用?
int age = 20;String name = "Jack";
赋值操作= (包括+=、-=、/=等都包含赋值操作) 不同于Java中的+-*/,= 是一个可以改变内存状态的操作,一个可以改变变量的符号。
这里的赋值操作其实包含了两个意思:
1、放弃原有的值或引用
2、得到 = 右侧变量的值或引用仔细说来:
(1)对于基本数据类型的变量, = 操作是完整地复制了变量的值。也就是说对于基本数据类型的变量,= 之后左右两侧的变量不再关联。
(2)对于引用数据类型变量,= 操作是复制了变量的引用。此时左右两侧的变量都指向同一个对象。
三、调用方法时的参数传递本质上就是一种赋值操作
So,简单说来
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝
也就是说,不论是引用类型还是基本类型,参数传递的都是一个值(一个字面值,一个地址值)
这个时候在回过来看一下上面的几句话,是不是清晰了很多呢。
java到底是值传递还是引用传递?
以上内容均由此整理
注:本人正在学习状态,文中多有引用,也有解释纰漏之处,敬请包涵、指正!
- Java学习(五)---java值传递
- Java学习-值传递
- Java学习之值传递
- Java学习之值传递
- java学习笔记-java只有值传递
- 【学习】java参数传递
- JAVA学习笔记(七)- 值传递与引用传递
- 【Java学习笔记】值传递和引用传递
- Java学习笔记(17)-- 值传递与引用传递
- java基础学习——值传递与引用传递
- [学习笔记]Java的值传递和引用传递,引用传递转值传递
- 关于Java按值传递的学习
- 学习笔记-java按值传递
- Java学习笔记五
- java学习笔记(五)
- java基础学习五
- Java学习笔记五
- JAVA学习五
- 我的Android 日常开发技术经验 60 条
- 【LeetCode】Merge Two Sorted Lists
- json方式定义Person对象
- 集成学习---如何增强个体学习器的多样性
- 安装matlab弹出 DVD 1 并插入 DVD 2 以继续的问题
- Java学习(五)---java值传递
- 解决Genymotion出现Unable to load VirtualBox engine
- 安全测试用例说明
- VS2015 未找到引用
- 第三十六课:经典问题解析三----------狄泰软件学院
- Problem B. Safe Squares Google APAC 2017 University Test Round C
- iOS开发笔记之五十七——__weak与__strong是如何解决循环引用的
- 创建一个数组,数组中有三个对象
- php使用traits实现代码复用、多继承