JAVA函数中的参数传递规律

1.抛出问题

当我们将参数传递给函数时, 会发生一些奇妙的现象: 传入给函数的一些参数在函数内部的逻辑执行完毕之后被修改了, 而一些参数却不会被修改 !!?

2.先说结论

  1. 基本数据类型及其包装类型作为函数参数传递时, 传递的是拷贝值, 因此函数内部对拷贝值的操作处理并不会影响到外部传入的基本数据类型
    就像钞票和印钞票的模子, 我把印好的钞票给你,你对钞票进行的的涂改,修剪并不会对我的钞票模子有任何影响

  2. 引用数据类型作为函数参数传递时, 传递的是对象的引用地址, 因此函数内部对对象的操作处理会影响到外部的引用类型
    就像电视和遥控器, 我把遥控器给你, 你对电视进行换台,设置电视属性肯定会对我先前看着的电视剧有影响的

  3. String 作为函数参数传递时, 传递的也是拷贝值(特例), 函数内部对 拷贝值的操作并不会影响到外部的String

3. 分析

java中的作为函数参数传递的类型主要有三类:

  1. 基本数据类型 + 包装类型
基本数据类型范围
byte八位, [-128,127]
short16位, [-32768,32767]
int32位, [-231,231-1]
long64位,[-263,263-1]
float32位,3.4e-45~1.4e38
double64位,4.9e-324~1.8e308
booleantrue or false
char16位
  1. 引用数据类型: 数组, 类, 接口, 枚举
引用数据类型举例类型
int[]数组
Object终极父类
Student自定义对象
  1. String 类型

还有特殊看待的数据类型: Stirng 对象

4. 试验代码

public class MyTest {
    public static void main(String[] args) {

        int i1 = 1;
        Integer i2 = 1;
        int[] arr = {1};
        String s = "NBA";

        f(i1,i2,arr,s);

        System.out.println( i1 ); // 1 未改变
        System.out.println( i2 ); // 1 未改变
        System.out.println( Arrays.toString(arr) ); // [789] 已改变
        System.out.println( s ); // NBA 未改变

    }

    public static void f(int i1, Integer i2, int[] arr, String s) {
        i1 = 123;
        i2 = 456;
        arr[0] =789;
        s = "CBA";
    }
}

5.总结

  • 基本数据类型 / 包装类型 / String类型 ==> 值拷贝传递
  • 引用数据类型 ==> 引用地址传递
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值