java传值传引用原理,Java传值传引用

一.在java中将数据类型分为基本数据类型和引用数据

(1)基本数据类型保存在栈中, 在java中有八中基本数据类型:byte,short,int,long,char , float,double, boolean

例:

int num=10;

double num2=20.5 ;

内存图如下:

6597977963261178600.jpg

(2)引用数据类型保存在堆中,在栈中只保存引有数据类型的引用也就是地址. 在java中引用数据类型有:数组,类,接口

例:

class Student{

String name;

int age;

char sex;

}

Student stu=new Student();

stu.name=”小王”;

stu.age=20;

stu.sex=’男’;

int[] arr={10,20,30,40};

6598220955330743222.jpg

二.基本数据类型在传递数据时,传值的副本,另一个值发生改变时,不影响原值。引用数据类型在传递数据时,传地址的副本,一个发生改变时,影响另一个. 除非引用指向新对象

例:传基本数据类型

int a=100;

int b=a;

b=0;

System.out.println(a);

System.out.println(b);

代码分析如下:

分析如下:

a=100 : a有一张100的人民币

b=a; 传值的副本: a将100块钱复制给了b, 即a和b各拥用100块钱

b=0; b将复制后的100变成0, 对A没有影响

输出结果是:a=100(原值不变), b=0;

例2:传引用数据类型

class 保险柜{

int money;

}

保险柜 xkey=new 保险柜();

xkey.money=100;

保险柜 ykey=xkey;

ykey.money=0;

System.out.println(xkey.money);

代码分析如下:

保险柜 xkey=new 保险柜(); //xkey为引用,相当于打开保险柜的钥匙

xkey.money=100; //得用xkey钥匙入保险柜中存入100元人民币

保险柜 ykey=xkey; //ykey为引用与xkey指向同一对象,即内存中只有一个保险柜,但有两把钥匙

ykey.money=0; //通过ykey这把钥匙,把保险柜中的人民币变成0

图分析:

6597566745912383438.jpg

输出结果为:0 (因为内存中只有一个保险柜对象)

例3:传引用数据类型

class 保险柜{

int money;

}

保险柜 xkey=new 保险柜();

xkey.money=100;

保险柜 ykey=xkey;

ykey=new 保险柜();

ykey.money=0;

System.out.println(xkey.money);

代码分析如下:

保险柜 xkey=new 保险柜(); //xkey为引用,相当于打开保险柜的钥匙

xkey.money=100; //得用xkey钥匙入保险柜中存入100元人民币

保险柜 ykey=xkey; //ykey为引用与xkey指向同一对象,即内存中只有一个保险柜,但有两把钥匙

ykey=new 保险柜(); //内存中产生了一个新的保险柜, ykey为新保险柜的钥匙

ykey.money=0; //通过ykey这把钥匙,把新保险柜中的人民币变成0

图分析:

6597851519423984063.jpg

输出结果为:100 (因为内存中新产生了保险柜对象,对原保险没有影响)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值