Java教程 目录

Java按值调用和引用调用

面试官:小伙子,你的代码为什么这么丝滑?

在Java中,方法参数的传递方式可以分为按值调用和引用调用两种方式。这两种方式在理解Java中的参数传递机制时非常重要。

按值调用

在Java中,所有的方法参数都是按值传递的。也就是说,当一个方法被调用时,实际上是将参数的值传递给了方法。这意味着在方法内部对参数的修改不会影响到方法外部的变量。

------ ----- ---- -
    ------ ------ ---- ------------- ----- -
        --- --- - ---
        -------------------------- ------ ----- --- --- - - -----
        -----------------
        ------------------------- ------ ----- --- --- - - -----
    -

    ------ ------ ---- --------------- ---- -
        --- - ---
        -------------------------- ------- --- --- - - -----
    -
-

在上面的代码中,我们定义了一个 changeValue 方法,该方法接收一个整型参数 num,并将其值修改为 20。在 main 方法中我们调用了 changeValue 方法,并打印了方法调用前后的 num 的值。可以看到,尽管在 changeValue 方法内部修改了 num 的值,但是在方法调用结束后,num 的值仍然是 10,这就是按值调用的特性。

引用调用

在Java中,虽然方法参数是按值传递的,但是对于引用类型的参数,传递的实际上是引用的值,也就是对象的地址。因此,在方法内部对于引用类型参数的修改会影响到方法外部的变量。

------ ----- ---- -
    ------ ------ ---- ------------- ----- -
        ----- --- - --- -- ---
        -------------------------- ------ ----- ------ --- - - --------
        ----------------------
        ------------------------- ------ ----- ------ --- - - --------
    -

    ------ ------ ---- ---------------------- ---- -
        ------ - ---
        -------------------------- ------- ------ --- - - --------
    -
-

在上面的代码中,我们定义了一个 changeArrayValue 方法,该方法接收一个整型数组参数 arr,并将数组的第一个元素修改为 10。在 main 方法中我们调用了 changeArrayValue 方法,并打印了方法调用前后数组的第一个元素的值。可以看到,尽管是按值传递的方式,但是由于参数是引用类型,所以在方法调用结束后,数组的第一个元素的值被成功修改为 10,这就是引用调用的特性。

在实际开发中,理解按值调用和引用调用的区别可以帮助我们更好地掌握Java中的参数传递机制,避免出现一些意想不到的问题。


上一篇:Java包装类
下一篇:Java strictfp关键字