java是按值调用

本文探讨了Java中参数传递的方式,强调Java总是采用按值调用,意味着方法内部对参数的修改不会影响到原始变量。通过示例展示了基本类型和对象引用的区别,对于对象引用,方法内修改会影响实际对象,因为它们都是指向同一内存位置的副本。
摘要由CSDN通过智能技术生成

首先回顾一下 在程序设计语言中有关将参数传递给方法(或函数)的一一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call byreference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。

Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给他的任何参数变量的内容。

public class 值传递 {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        swap(num1, num2);
        System.out.println("num1=" + num1);
        System.out.println("num2=" + num2);
    }

    private static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
        System.out.println("a=" + a);
        System.out.println("b=" + b);
    }
}

在这里插入图片描述

解析:在swap方法中,a、b的值进行交换,并不会影响到num1、num2。因为,a、b中的值,只是从num1、num2的复制过来的。也就是说,a、b相当于num1、num2的副本,副本的内容无论怎么修改,都不会影响到原件本身。

通过上面例子,我们已经知道了一个方法不能修改一个基本数据类型的参数,而对象引用作为参数就不一样,请看下面例子.

class Test7{
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        System.out.println(arr[0]);
        chang(arr);
        System.out.println(arr[0]);
    }

    private static void chang(int[] array) {
        //将数组的第一个元素变为0
        array[0] = 0;
    }
}

结果:
在这里插入图片描述

解析:array被初始化arr的拷贝也就是-一个对象的引用,也就是说array和arr指向的是同一个数组对象。因此,外部对引用对象的改变会反映到所对应的对象上。

通过上面例子我们已经看到,实现一个改变对象参数状态的方法并环是一件难事。理曲很简单,方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值