java中传值与传地址
来源:互联网 发布:音频剪辑合成软件 mac 编辑:程序博客网 时间:2024/04/28 21:08
java中传值与传地址一直是很多初学者容易困扰的问题,java中传值我们可以想像成将值copy到一个新的内存空间,换句话说就是系统将为目标对象重新开辟一个完全相同的内存空间。代码如下:
/** * @author 陈龙 */public class PassValue {public static void main(String[] args) {int x = 5;change(x);System.out.println(x);//打印5}public static int change(int x) {x = 3;return x;}}
方法中的形参x是调用该方法才创建,把x赋值给形参,相当于创建了一个内存和原x相同的内存,故该方法运行后,形参x的确改变,但main方法中x不会受到影响,因为不属于同一块内存空间。
传地址:代码如下
/** * @author 陈龙 */public class PassRef {int x;public static void main(String[] args) {PassRef obj = new PassRef();obj.x = 5;change(obj);System.out.println(obj.x);//打印3}public static void change(PassRef obj) {obj.x = 3;}}
java中对象的传递是传地址。传地址相当于把地址号传递给另一个对象,这时,修改这个对象中的数据就会影响到原对象中的数据,因为他们都是指向同一块内存空间。同理,java中数组也是传地址的,代码如下:
int[] i = {1,2,3};
int[] j = i;
j[0]=0;
System.out.println(i[0]); //这时改变j的值也会影响到i的值,所以打印i[0]的值也为0,如果想不影响原值,可以使用System中arraycopy方法
但String这个对象有些特殊,代码如下:
public static void main(String[] args) {
String x = "abc";
change(x);
System.out.println(x); //打印"abc"
}
public static String change(String x) {
x = "123";
return x;
}
结果是"abc",我们知道Stirng这个类是一个final类,是不可修改的.将"abc"传递给方法形参x时,实际上和基本数据类型传递一样,是传递的值,也就是说形参x实际上是重新创建了一个块新的内存块(可参考String源码)。所以这两个Sting的x不属于同一块内存空间,则改变形参x后不会影响原来x的值
- java中传值与传地址
- java传地址问题>?
- java获取有线网络的ip地址 与mac地址
- Java 设计模式与建模专题 地址
- JAVA中值传递与地址传递
- JAVA IP地址与数字互转
- java IP地址与十进制转换
- Java基础-值传递与地址传递
- java数据结构与算法-链地址法哈希表
- 国外JAVA与IT技术网站地址
- 传值与传地址
- 【JAVA】网络与通信--IP地址与子网划分讲解
- Java-绝对地址与相对地址/绝对定位与相对定位
- JAVA地址
- java 地址
- Java实现IP地址字符串与整数之间的转换
- java IP地址与数字之间的转换
- IP地址与整形转换 java,python实现
- 如何建立长方形的Application Tile动态砖
- 精心整理的C语言面试题目
- Android ApiDemo分析(八)
- HDOJ FATE 二维DP
- 呈現IsolatedStorage中的多媒體資
- java中传值与传地址
- const初始化
- Android ApiDemo分析(九)--Graphics
- Struts2总结
- 树状数组-模板
- 怎样在Android中解析doc、docx、xls、xlsx格式文件?
- Windows Phone 7应用程序开发(二)Hello Windows Phone(5)
- PHP内核研究: PHP源码目录分析
- 18、约瑟夫环问题