java值传递面试题2



1.
public class Test {
public static void test(StringBuffer str){
str.append(",World!");
}
public static void main(String[] args)
{
StringBuffer string = new StringBuffer("Hello");
test(string);
System.out.println(string);
}

}

输出结果 Hello,World.

2.

public class Test {
public static void test(String str){
str="World";
}
public static void main(String[] args){
String string = "Hello";
test(string);
System.out.println(string);

}
}

输出结果: Hello

### Java 引用传递面试题及答案解析 #### 参数传递机制 在Java中,参数传递遵循按调用的原则。对于基本数据类型的参数,实际上传递的是该原始的一份副本;而对于对象类型(即引用类型),则传递指向堆内存中对象的引用地址的一个拷贝[^1]。 #### 示例代码说明 下面通过一段简单的代码来解释这一概念: ```java public class ReferencePassingExample { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); changeValue(sb); System.out.println(sb.toString()); // 输出 Hello modifyObject(sb); System.out.println(sb.toString()); // 输出 HelloWorld } private static void changeValue(StringBuilder str) { str = new StringBuilder("World"); // 创建新对象并改变局部变量str所指的内容 } private static void modifyObject(StringBuilder str){ str.append("World"); // 修改原对象的状态 } } ``` 在这个例子中,`changeValue()` 方法尝试更改传入的对象本身,但由于它操作的是原有引用的一个副本来创建新的 `StringBuilder` 实例,因此不会影响到外部定义的那个字符串构建器实例。然而,在 `modifyObject()` 中对方法内部接收者所做的任何状态上的变更都会反映回原来的对象上,因为两个地方都持有同一个对象的不同引用副本[^2]。 #### 关键点总结 - 基本数据类型作为参数时会复制其具体数; - 对象引用作为参数时会复制引用本身的而不是整个对象的数据结构; - 可以利用这一点理解为什么某些情况下修改了形参却无法真正改变实参中的内容,而另一些情况下的确能够看到变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值