Java中参数以by value方式而非by reference 方式传递(值传递)
来源:互联网 发布:访客网络设置限速多少 编辑:程序博客网 时间:2024/05/17 03:38
Java中参数以by value方式而非by reference 方式传递(值传递)
很多人都普遍的认为:java中的参数以by reference方式传递。其实这是一个误解,参数其实是以by value 方式传递。这个误解源于【Java object 都是 object reference 】这一事实。下面我们来看一个实例:
import java.awt.Point;public class PassByValue {public static void modifyPoint(Point pt,int j){pt.setLocation(5, 5);j=15;System.out.println("During modifyPoint " + "pt = " + pt + " and j = " + j);}public static void main(String args[]){Point p = new Point(0, 0);int i = 10;System.out.println("Before modifyPoint " + "p = " + p + " and i = " + i);modifyPoint(p, i);System.out.println("Before modifyPoint " + "p = " + p + " and i = " + i);}}
程序输出结果如下:
Before modifyPoint p = java.awt.Point[x=0,y=0] and i = 10
During modifyPoint pt = java.awt.Point[x=5,y=5] and j = 15
Before modifyPoint p = java.awt.Point[x=5,y=5] and i = 10
During modifyPoint pt = java.awt.Point[x=5,y=5] and j = 15
Before modifyPoint p = java.awt.Point[x=5,y=5] and i = 10
在此结果中整型的i值没有发生改变而Object类型的p的值却发生了变化,原因如下:
java 是通过值传递 当(by value传递) 当 调用modifyPoint()方法并传值的时候,
整型值i会被copy一个复件传到方法中,而p是Point 的对象,
所以出入的时候是将P的引用值(reference)的复件传递过去,而不是将Point 的复件传递过去。
当运行完,modifyPoint()方法中对i的值修改只是对它的副本进行修改,所以对main中的i值没有影响,
当运行完,modifyPoint()方法中对i的值修改只是对它的副本进行修改,所以对main中的i值没有影响,
而modifyPoint()方法中对Point 的对象的引用值(reference)的副本的修改将改变main中的Point的引用值,
所以将影响main中p的值。
- Java中参数以by value方式而非by reference 方式传递(值传递)
- 【Practical Java】实践1:参数以by value方式而非by reference方式传递
- 参数以by value方式而非by reference方式传递
- 读书笔记之java中参数传递by value而非by refernce
- java中参数传递详解:call by value(按值传递)和 call by reference(按引用传递)
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
- perl中子程序中参数的两种引用(传递)方式:pass by value and pass by Reference(传入引用)
- Java的参数传值方式by value而不是by reference
- java当中也有pass-by-value值传递或pass-by-reference地址传递吗
- call by value 和call by reference 部分转载 java 值传递 和 引用传递
- Java 只有值传递(Pass By Value),没有引用传递(Pass By Reference)
- Java call by value 和 by reference (值传递和引用传递)
- Java的参数传递的唯一方式:传值(By Value)(csdn)
- JAVA值传递(call by value)
- 如何理解JAVA 参数传递总是值传递(pass-by-value )
- 值传递(pass by value)
- java中参数的传递方式【值传递】
- java的参数是值传递而非引用传递
- 第65天的交易(2013-7-8)(-100)(-260)
- 单核双核多线程的简单问题
- Revit MEP中如何利用API实现把弯头链接到风管上
- 一个简单的实现复制文件并修改文件扩展名的小程序
- [技术分享--RMS篇] 请不要把 AD RMS 服务器安装到 DC 上
- Java中参数以by value方式而非by reference 方式传递(值传递)
- Tomcat简介
- 博客长草了,该整理收拾了
- RAW_SOCKET
- 袁军晓专家提示:8种早餐吃法最错误 油条早餐会致癌
- 用Eclipse生成jar文件
- 使用POI读写Excel文件
- [文字工具] Beyond Compare 3.3.5
- 窗口子类化