为什么Java中只有值传递。。案例

Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)
Java 程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。

案例一:一个方法不能修改一个基本数据类型的参数(数值型或者布尔型)

package com.jj.demo;

import org.junit.Test;

/**
 * @author fjj
 * @date 2021/3/18 18:58
 */
public class Demo {
    //用来验证 值传递的方法
public void swap(int a,int b){
    int c=a;
     a=b;
    b=c;
    System.out.println("a = " + a);
    System.out.println("b = " + b);
}
    @Test
    public void demo1(){
        int A=10;
        int B=15;
        swap(A,B);
        System.out.println("A = " + A);
        System.out.println("B = " + B);
    }

}

结果

a = 15
b = 10
A = 10
B = 15

解析:
这里在方法中只是swap 的方法中的a b 值进行了改变,交换,而没有改变A ,B 的值。相当于a b 是A B 的副本,不会影响到原来的值。

验证了一个方法不能修改一个基本数据类型的参数。

案例二:一个方法可以改变一个对象参数的状态

  public void change(int [] array){
    //把数组的第一个变成 0
      array [0]=0;
  }

    @Test
    public void demo2(){

    int arr[]={1,2,3,4,5};
        System.out.println(arr[0]);
        change(arr);
        System.out.println("arr = " + arr[0]);
    }
}

结果

1
arr = 0

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

验证了一个方法可以改变一个对象参数的状态

案例三 :一个方法不能让对象参数引用一个新的对象

@Test
    public void demo3(){
    Person person = new Person("娇娇");
    Person person1 = new Person("愉涵");
    swap1(person,person1);
    System.out.println(person.getName());
    System.out.println(person1.getName());

}
 public void swap1(Person a,Person b){
    Person c=a;
    a=b;
    b=c;
     System.out.println("a = " + a.getName());
     System.out.println("b = " + b.getName());
 }

结果

a = 愉涵
b = 娇娇
娇娇
愉涵

方法并没有改变 person ,person1 中的对象引用,只是swap1 方法的参数X 和y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。

总结

一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能让对象参数引用一个新的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值