Java核心技术笔记—方法参数(值调用和引用调用)
2013-10-12 16:43
645 查看
最近重读Java核心技术,不得不说的是这本书确实不错。虽然本人不太喜欢做笔记,但还是觉得某些重要的地方必须要记一下。
关于方法参数调用一般有两种:值调用(call by value)和引用调用(call by reference)。顾名思义,值调用表示方法接收的是调用者提供的值;引用调用表示方法接收的是调用者提供的变量的地址。
特别重要的是:在Java中,程序设计总是采用值调用。即:方法得到的是所有参数值得一个拷贝,方法不能修改传递给它的任何参数变量的内容。
这里用一个例子来说明,如下代码:
这段程序输出如下:
=== 测试基本数据类型 ===
调用前 a=30
调用后 a=30
=== 测试对象引用参数 ===
调用前
[name=Java核心技术, price=30.0]
[name=算法技术手册, price=20.0]
对象引用类型参数调用可以改变对象内容
[name=Java核心技术, price=100.0]
对象引用类型参数调用不能改变参数引用值
[name=Java核心技术, price=100.0]
[name=算法技术手册, price=20.0]
总结一下:
Java程序设计中对象采用的不是引用调用,实际上,对象引用进行的是值传递。
一个方法不能修改一个基本数据类型的参数;
一个方法可以改变一个对象参数的状态;
一个方法不能实现让一个对象参数引用一个新的对象。
关于方法参数调用一般有两种:值调用(call by value)和引用调用(call by reference)。顾名思义,值调用表示方法接收的是调用者提供的值;引用调用表示方法接收的是调用者提供的变量的地址。
特别重要的是:在Java中,程序设计总是采用值调用。即:方法得到的是所有参数值得一个拷贝,方法不能修改传递给它的任何参数变量的内容。
这里用一个例子来说明,如下代码:
public class TestMP { public static void main(String[] args) { System.out.println("=== 测试基本数据类型 ==="); int a = 30; System.out.println("调用前 a=" + a); tripValue(a); System.out.println("调用后 a=" + a); System.out.println(); System.out.println("=== 测试对象引用参数 ==="); Book ba = new Book("Java核心技术", 30); Book bb = new Book("算法技术手册", 20); System.out.println("调用前"); System.out.println(ba); System.out.println(bb); System.out.println(); System.out.println("对象引用类型参数调用可以改变对象内容"); adjustPrice(ba); System.out.println(ba); System.out.println(); System.out.println("对象引用类型参数调用不能改变参数引用值"); swapBook(ba, bb); System.out.println(ba); System.out.println(bb); } static void tripValue(int data) { // doesn't work data = data * 3; } static void adjustPrice(Book aBook) { aBook.setPrice(100.0); } static void swapBook(Book x, Book y) { // doesn't work Book temp = x; x = y; y = temp; } } class Book { private String name; private double price; public Book(String name, double price) { this.name = name; this.price = price; } public void setPrice(double p) { this.price = p; } // @Override public String toString() { return "[name=" + this.name + ", price=" + this.price + "]"; } }
这段程序输出如下:
=== 测试基本数据类型 ===
调用前 a=30
调用后 a=30
=== 测试对象引用参数 ===
调用前
[name=Java核心技术, price=30.0]
[name=算法技术手册, price=20.0]
对象引用类型参数调用可以改变对象内容
[name=Java核心技术, price=100.0]
对象引用类型参数调用不能改变参数引用值
[name=Java核心技术, price=100.0]
[name=算法技术手册, price=20.0]
总结一下:
Java程序设计中对象采用的不是引用调用,实际上,对象引用进行的是值传递。
一个方法不能修改一个基本数据类型的参数;
一个方法可以改变一个对象参数的状态;
一个方法不能实现让一个对象参数引用一个新的对象。
相关文章推荐
- java 分割合并文件
- Spring加载resource时classpath*:与classpath:的区别
- spring事务配置的五种方式
- Java虚拟机JVM内存分区及代码执行机制
- Myeclipse 8.5 配置SVN
- SHH入门:Spring框架简介
- Spring Batch之XML文件操作
- java 多线程操作List,已经做了同步synchronized,还会有ConcurrentModificationException,知道为什么吗?
- Java的四种引用
- Spring与Hibernate整合出现的错误 1.0
- 使用nextInt()等接受输入时必须注意换行符的输入 分类: B1_JAVA 2013-10-12 16:21 1755人阅读 评论(0) 收藏
- Java加密解密大全
- Myeclipse配置插件
- 概述struts,以及struts如何实现MVC架构的
- Java中的不可变类
- 关于spring MVC web.xml配置文件的编写总结(持续更新)
- struts的问题
- myeclipse中调试时查看属性值的窗…
- eclipse使用技巧
- 【java学习】快速求素数的方法