Java语言中的方法参数——值传递与引用传递

  • 1
  • 1,771次阅读
  • A+
所属分类:Java

Java语言中的方法参数有两种:

1、基本数据类型(数字、布尔值)

2、对象引用

基于方法参数的传递有两种方式:值传递和引用传递。

值传递表示方法接收的是调用者提供的值。

引用传递表示方法接收的是调用者提供的变量地址。

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

先用基本数据类型作为参数来举个栗子:

public static void methodA(double i){

     i = 3 * i;

    System.out.println(i);

}


double i = 3.0;

methodA(i);

System.out.println(i);

将 i 作为参数传递至methodA方法中,此时的 i 是作为参数值的一个拷贝,属于值传递,那么调用者和被调用者是两个不同的变量,方法体里面对变量的改变,不会影响方法体外面的变量。

如果将实例对象作为参数进行传递:

public static void plus(carc){

      c.setPrice(c.getPrice() * 3);

 }
     car c = new car(3.0);

     plus(c);

     System.out.println(c.getPrice());

将car的实例对象c作为参数传递至plus方法中,此时的 c 对象是作为参数值的一个拷贝,属于引用传递,那么调用者和被调用者用的是相同的变量,如果在方法体内部对变量进行修改,会影响方法体外的变量。

那么实例对象作为参数进行传递,就是属于引用传递吗?这里可做一个反例来说明。

 public staticvoid changeName(carc){

      c = new car();

      c.setName("奔驰");

     }

     car c = new car();

     c.setName("奥迪");

     changeName(c);

     System.out.println(c.getName());

将实例对象car传入changeName方法中,c作为拷贝对象进行传递,方法中对c实例再次进行实例化,并且赋予参数状态,方法中的c对象更改属性状态,并不会影响方法外的c实例属性,changeName方法结束后,方法中的c实例便会被废弃掉,所以最终会输出“奥迪”。

表明方法中如果对象作为参数的话,属于值传递,并非引用传递。

总结:

方法不能修改一个基本类型的参数(即数值型和布尔型)

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

方法不能让对象参数引用一个新的对象 


  • 我的微信
  • 加好友一起交流!
  • weinxin
  • 微信公众号
  • 关注公众号获取分享资源!
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • leira leira 4

      大佬,今天终于搞懂了