专栏首页java系列博客有关java中的参数调用的问题

有关java中的参数调用的问题

专业术语——

    按值调用(call by value) 表示方法接受的是调用者提供的值。

    按引用调用(call by reference) 表示方法接受的是调用者提供的变量地址。

    一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

  java中只有值传递!

    java中只有值传递!

    java中只有值传递!

    重要的事情要说三遍!!!

  也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。

public static void tripleValue(double x) // doesn't work
{
   x=3*x;

}

double persent = 10;
tripleValue(percent);

     可以看到,无论怎样,调用这个方法之后,percent的值还是10.下面看一下具体的执行过程:

1) x 被初始化为percent值的一个拷贝(也就是10)。
2) x被乘以3后等于30.但percent仍然是10)
3) 这个方法结束之后,参数变量x不再使用。

    方法参数共有两种类型:

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

    .对象引用。

    一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,可以很容易地利用下面这个方法实现将一个雇员的薪金提高两倍的操作:

public static void tripleSalary(Employee x) //works
{
  x.raiseSalary(200);
}

当调用
harry = new Employee(...);
tripleSalary(harry);
时,具体的执行过程如下:

1) x被初始化为harry 值的拷贝,这里是一个对象的调用。
2) raiseSalary 方法应用于这个对象引用。x和harry同时引用的那个Employee对象的薪金提高了200%。
3) 方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象。

方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。

下面我们写一个交换两个对象的方法:

Boy a = new Boy(...);
Boy b = new Boy(...);
swap(a,b);

public static void swap(Boy x, Boy y) //doesn't work
{
  Boy temp = x;
  x = y;
  y = tmp;
}


swap 方法的参数x和y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝。

然而,在方法结束后参数变量x和y被丢弃了。原来的变量a和b仍然引用这个方法调用之前所引用的对象。

总结:

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

.一个方法可以改变一个对象参数的状态。(即对象成员属性的值,一般为set(....)方法 )

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • maven 构建第一个HelloWorld

    小小明童鞋
  • rownum浅析

    小小明童鞋
  • ORACLE

    小小明童鞋
  • vue深入浅出系列(连载中)

    本文档发布于:https://www.kancloud.cn/hanxt/vuejs2/content

    字母哥博客
  • 超级码力初赛第二场 五字回文

    小栖最近很喜欢回文串,由于小栖的幸运数字是5,他想知道形似“abcba”的回文串在他给定的字符串中的数量

    Spaceack
  • 性能优化-测试If-Else和if哪个性能更好

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 谱聚类

    基于无向加权图G=(V,E),其中每个顶点vi对应一个xi,顶点vi和vj间的边有权值wij≥0

    AIHGF
  • 【DB笔试面试693】在Oracle中,什么是ORAchk工具?

    ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用。ORAchk软件包很简...

    小麦苗DBA宝典
  • Android Span在项目中的几种使用方式

    Jingbin
  • Android Span在项目中的几种使用方式

    Jingbin

扫码关注云+社区

领取腾讯云代金券