在Java中,若执行以下代码,最终输出结果是什么? ``` class Person { String name; int age; } public class Main { public static void modify(Person p) { p = new Person(); p.name = "Alice"; } public static void main(String[] args) { Person p1 = new Person(); p1.name = "Bob"; modify(p1); System.out.println(p1.name); } } ```

答案解析

### 核心考点说明 本题考察Java方法参数的引用传递机制,需理解对象引用在方法调用时的复制特性及堆栈内存的关系。 ### 解题思路分析 1. `p1`在堆内存中创建对象,`name`属性初始化为"Bob" 2. `modify`方法接收的是`p1`引用的副本(形参`p`),此时`p`与`p1`指向同一对象 3. 方法内`p = new Person()`使形参`p`指向新对象,但原`p1`的引用不受影响 4. 最终输出的是原对象的`name`属性 ### 选项详细分析 - **A**:错误。误以为方法内对形参的重新赋值会影响实参,混淆引用传递的本质是值传递(复制引用地址) - **B**:正确。实参`p1`始终指向原对象,方法内操作不影响其实例属性 - **C**:错误。可能误认为`new Person()`后未显式赋值的`name`为`null`,但此处`p1`的属性未被修改 - **D**:错误。代码语法正确,无编译错误 ### 易错点提醒 - 方法调用时对象引用的值传递特性容易与C++的引用传递混淆 - 方法内对形参的重新赋值只会改变局部变量的指向,不影响原引用
正确答案:B
随机推荐
开始刷题