java中参数的引用类型——按值引用、按索引引用

本文详细探讨了Java中参数传递的机制,包括按值调用和按引用调用的概念,解释了为什么Java总是采用按值调用,并通过代码示例展示了如何通过方法修改对象状态而不改变对象引用。
  • 概述

        现在常用常见的方法参数的传递方法我们可以划分为按值调用(call by value:表示方法接受的是调用者提供的值)、按引用调用(call by reference:表示方法接收的是调用者提供的变量地址),在最古老的高级语言Algol中也曾出现过按名调用(call by name)。

       我们可以通过一个方法可以修改传递引用所对应的变量值,这里我们常见的是通过方法参数传递对象参数;但是我们不能通过一个方法对该传递值所调用所对应的变量值。我们应该要牢牢记住java语言中总是采用按值调用,也就是说方法得到的是多有参数值的一个拷贝,所以方法不能修改传递给他的任何参数变量的内容,即使方法参数中传递的是一个“对象”,这个对象并不是真正对象的本身而是对象的一个引用,然而这个应用本身也是一个值。

参数是对象类型的示例,对应的值可以修改成功
参数是对象,试图交换对象的示例,但是交换不能成功

 

参数是基本类型的示例
  • 代码示例

package javabook;
class Employee {
    private int salary;
    private String name;
    public Employee(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

package javabook;
public class EmployeeMain {
    public static void main(String[] args){
        System.out.println("传递的对象是一个基本的值类型");
        int x1=5,x2=5;
//        通过返回值的形式实现了对变量的重新赋值,从而实现变量值得增加
        x1=intadd(x1);
        System.out.print(x1+"    ");
        add(x2);
        System.out.println(x2+"\n");

        System.out.println("传递的是对象,论证java是按值传递");
        Employee tom=new Employee("Tom");
        Employee joy=new Employee("Joy");
        System.out.println("这里是进行swap之前两个对象变量的信息:");
        System.out.println("tom"+tom.getName()+","+tom+"   joy"+joy.getName()+","+joy+"\n");
        swapEmployee(tom,joy);
        System.out.println("这里是进行swap之后两个对象变量的信息:");
        System.out.println("tom"+tom.getName()+","+tom+"   joy"+joy.getName()+","+joy+"\n");

        System.out.println("传递的是对象,论证可以通过方法来修改引用所对应的值:");
        System.out.println("改变前的值:"+tom.getName());
        tom.setName("Tom1");
        System.out.println("改变后的值:"+tom.getName());
    }

    public static int intadd(int x){
        x=x+5;
        return x;
    }
    public static void add(int x){
        x=x+5;
    }

    static void swapEmployee(Employee employee1, Employee employee2){
        System.out.println("这里展示的是一个一个方法传递应用所对应的示例:");
        System.out.println("这里表现的是交换之前的效果:");
        System.out.println("employee1:"+employee1+"      employee2:"+employee2);
        Employee temp;
        temp=employee1;
        employee1=employee2;
        employee2=temp;
        System.out.println("这里表现的是交换后的效果:");
        System.out.println("employee1:"+employee1+"      employee2:"+employee2+"\n");
    }
}
  • 总结

  1. 一个方法不能修改一个基本数据类型的参树
  2. 一个方法可以改变一个对象参数的状态
  3. 一个方法不能让对象参数引用一个新对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值