值类型和引用类型作为方法参数的区别
  ILwIY8Berufg 2023年11月13日 46 0
package com.yzy.memorymap;

/**
 * @className Test1.java
 * @author yangsir
 * @version V1.0
 * @date 2019年7月31日-上午9:12:46
 * @description
 *
 */
public class Test1 {

	public static void main(String argv[]) {
		Test1 t = new Test1();// 调用非静态的方法要创建对象
		t.first();// 调用first方法
	}

	public void first() {
		int i = 5;// 给局部变量i赋值
		Value v = new Value(); // v.i = 15 i = 5 创建一个对象初始值为成员变量的初始值
		v.i = 25; // v.i = 25 i= 5 将25赋值给v堆中的i
		second(v, i);// v.i = 25 i = 5 此时v = v.i=25,i为局部变量的值,调用second方法
		System.out.println(v.i);// 最后val被销毁,所以v.i = second里面第二行的赋值,即v.i=20
	}

	public void second(Value v, int i) {
		i = 0;// v = 25 i=0 此时first中的局部变量已经销毁,0赋值给i
		v.i = 20; // v.i = 20 i= 0 此时将v堆中的i v.i = 20
		Value val = new Value(); // v = 15 i = 0 新创建一个对象 初始值为成员变量的初始值
		v = val;// v.i = 15 i = 0 将新对象的地址值给之前对象
		System.out.println(v.i + " " + i);// v.i = 15 i = 0 所以输出的为新对象的地址访问的值
	}
}

class Value {
	int i = 15;

}
下面附一张我画的内存草图

值类型和引用类型作为方法参数的区别_System

总结:值类型的数据在不同的方法中不相同,引用类型共享一个堆中的数据。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
ILwIY8Berufg