Java 中的参数传递是按值还是按引用?

在 Java 中,参数传递是按值传递的(Pass by Value),但这个概念需要根据传递的参数类型来具体理解。

基本类型参数

对于基本类型(如 intcharboolean 等),参数传递确实是按值传递。这意味着方法接收的是传入参数的一个副本,对这个副本的任何修改都不会影响原始变量。

引用类型参数

对于引用类型(如对象、数组等),参数传递也是按值传递,但传递的是引用的副本。这意味着方法接收的是一个指向对象的引用的副本,而不是对象本身。因此,通过这个引用可以修改对象的状态,但不能改变引用本身所指向的对象。

示例代码

public class ParameterPassingExample {
    public static void main(String[] args) {
        int num = 10;
        changeValue(num);
        System.out.println("num: " + num); // 输出: num: 10

        StringBuilder sb = new StringBuilder("Hello");
        changeReference(sb);
        System.out.println("sb: " + sb); // 输出: sb: Hello

        changeContent(sb);
        System.out.println("sb: " + sb); // 输出: sb: Hello World
    }

    // 修改基本类型参数
    public static void changeValue(int value) {
        value = 20;
    }

    // 修改引用类型参数的引用
    public static void changeReference(StringBuilder sb) {
        sb = new StringBuilder("World");
    }

    // 修改引用类型参数的内容
    public static void changeContent(StringBuilder sb) {
        sb.append(" World");
    }
}

解释

  1. 基本类型参数:changeValue 方法接收 num 的副本,并将其修改为 20。但主方法中的 num 仍然是 10,因为方法中修改的是副本。
  2. 引用类型参数:changeReference 方法接收 sb 的引用副本,并将其重新指向一个新的 StringBuilder 对象。但主方法中的 sb 仍然指向原来的对象,因此输出仍然是 “Hello”。changeContent 方法接收 sb 的引用副本,并通过这个引用修改了对象的内容。因此,主方法中的 sb 的内容被修改为 “Hello World”。

总结

  • 基本类型:按值传递,方法中修改的是副本,不影响原始变量。
  • 引用类型:按值传递,方法中传递的是引用的副本,可以通过这个引用修改对象的内容,但不能改变引用本身所指向的对象。
#java面试题#
全部评论

相关推荐

10-15 20:01
已编辑
上海大学 Java
钉钉什么垃圾公司,约面鸽人
光年在眼前:不是坏事,感觉钉钉挺逆天的,二面结束还给我留作业,让我使用钉钉和看最新的发布会,然后说感受,我是应该不会去,三面直接拒绝不面了
点赞 评论 收藏
分享
理智的芭乐在查重:这边男朋友还有hc吗
点赞 评论 收藏
分享
09-25 23:37
已编辑
桂林电子科技大学 Java
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务