值传递与引用传递的业务场景

值传递与引用传递

参数传递(分为值传递和引用传递)

按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
1、对象是按引用传递的
2、Java 应用程序有且仅有的一种参数传递机制,即按值传递(引用传值传递的是原始值的内存地址,其实也是一种按值传递)
3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

举个例子1:
1 public class ParamReference {
2
3 public static class ParamterE1{
4 public String name=“xiaotiaosi”;
5 }
6
7 public static void run(ParamterE1 paramterE1,String a,int b){
8 ParamterE1 paramterE=paramterE1;
9 paramterE.name=“xiaohua111”;
10 a=“girl”;
11 b=1;
12 }
13
14 public static void main(String[] args) {
15 ParamReference paramReference=new ParamReference();
16 ParamterE1 paramterE1=new ParamterE1();
17 String a=“boy”;
18 int b=0;
19 paramReference.run(paramterE1,a,b);
20 System.out.println(paramterE1.name+" “+a+” "+b);
21 }
22 }
程序运行的结果为:xiaohua111 boy 0

原始对象内的成员变量name的值改变,原始String类型的变量a 和原始int类型的变量b值没有发生改变。

说明:
1.对象就是传引用
2.原始类型就是传值(boolean 、char、byte、short、int、long、float、double)
3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。

注:通过查资料发现String类型比较特殊,在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性。
原因:首先我们看一下String类的实现,String类是通过private final char value[]数组实现的,从给的数组我们能够发现这个char[]数组使用了final关键字修饰,也就意味着,这个String类型的对象不可变,那么就有人要问了,既然不可变,那么我们如何修改字符串的值喃?例如:String str=“xiaotiaosi321”;如何将已创建的字符串对象修改成"xiaoshuaige321",首先我想给你们扫除一个误区,String类创建的字符串对象是不可变的,也就是修改不了的,哪有人就要问了,为啥str=“xiaoshuaige321”;语句好使啊,首先str并不能完全代表String类创建的字符串对象,str只是一个字符串变量的引用,str=“xiaoshuaige321”;语句只是将str引用指向了"xiaoshuaige321"字符串对象,相当于str=new String(“xiaoshuaige321”); ,所以当String作为传参类型时,在方法中进行了字符串引用的重新复制时,只是将引用指向了新的对象,并没有对原始的对象进行修改,当方法执行完毕之后,作为虚拟机栈中局部变量都会被销毁,方法一些操作被还原,str引用重新指向"xiaotiaosi321";,故执行后和执行前值没有改变。

注:说的通俗易懂点
值传递:
小刘去餐厅吃饭,看见别人点的烤鸭挺好吃,就把服务员叫过来,说我要一份烤鸭,服务员从后厨拿来一份烤鸭,小明吃完了,但是他吃的烤鸭跟旁边那个人吃的是一份吗?当然不是。
引用传递:
小刘回到家,他妻子说:冰箱二层有一只鸡,你去做了;
小刘做好了,叫妻子过来吃饭。
这个时候,他妻子现在看见的鸡和她买回来的一样吗?
当然不一样,都做熟了;
相当于鸡就是数据
冰箱二层就是存储数据的地址
把鸡做熟了就是相当于把值改变了
地方还是那个地方,就是鸡变了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值