一道Java题

public class Example {
String str = new String(“good”);
char[] ch = {‘a’,'b’,'c’};
public static void main(String[] args) {
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+” and “);
System.out.println(ex.ch);
}
public void change(String str,char ch[]){
str=”test ok”;
ch[0]=’g';
}
}

请问最后输出的是什么?

答案是:good and gbc

解析:

public class Example {
    String str = new String(“good”); 
    // str_1(暂时标记),指向内存中的一个String对象,该对象的值为"good"
    char[] ch = {‘a’,'b’,'c’};
    // ch_1,指向内存中的一个数组对象,该数组的[0],[1],[2]a,b,c
    public static void main(String[] args) {
        Example ex=new Example(); // 创建一个Example的实例,用于调用change方法

        ex.change(ex.str,ex.ch); // 重点:执行change方法的过程!

        // 输出str_1和ch_1,此时str_1还是指向"good"的,ch_1 还是指向之前的数组,但是驻数组内容已经被改变
        System.out.print(ex.str+” and “);
        System.out.println(ex.ch);
    }
    public void change(String str,char ch[]){
        // str_2 指向的是 内存中 的 "good" 实例
        // ch 指向的是 内存中 abc 的 数组

        // 重点!!str是按值传递的,而ch是按地址传递的

        str=”test ok”; // str_2指向 内存中 "test ok" 对象,而不是将"good"对象转变 

        ch[0]=’g'; // ch_2[0] 指向的是同一个对象的地址,更改的话,此对象会被改变
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值