java面试题之传值和传址

简介

这个是经常出去面试时候,会遇到的一个考点,面试官会出一些基本的传值和传址的题,我们牢牢记住下面这个结论:基本数据类型传递的是值,引用数据类型传递的是地址

经典面试题

public class ParameterTest {
    public static void main(String[] args) {
        int i = 1;
        String str = "hello";
        Integer num = 200;
        int[] arr = {1, 2, 3, 4, 5};
        MyData myData = new MyData();
        change(i, str, num, arr, myData);

        System.out.println("i=" + i + "\n"
                + "str=" + str + "\n" +
                "num=" + num + "\n" + "arr=" + Arrays.toString(arr) + "\n"
                + "my.a=" + myData.a);
    }

    public static void change(int j, String s, Integer n, int[] a, MyData m) {
        j += 1;
        s += "world";
        n += 1;
        a[0] += 1;
        m.a += 1;
    }
}

class MyData {
    int a = 10;
}

输出结果

在这里插入图片描述

面试考点

  1. java中的参数传递只有传值和传址。
  2. 基本类型是传值,无论在方法中进行了何种操作,原值不变。
  3. 其他引用类型作为参数,是传地址值,方法中对此引用类型数据做了修改,原值会发送变化。
  4. 当参数类型是对象的时候,如果对对象的值进行了改变,也会改变原对象的值。
  5. 特殊类型:如String和基本的包装类型等不可变的特性。

总结

栈:基本数据类型、数据的引用变量,这两种存放在栈内存。
堆:new创建的对象(包换数组),是存放在堆内存中,同时分配一个内存地址值,并将其附值给引用他的变量,所以到底是传值还是传址,就可以清晰得出结论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值