《Java完全参考手册》Primitive Type Wrappers章节加粗语句含义咨询
语句含义解释
你提到的加粗英文语句翻译为:两个方法无法引用同一个int类型的实例。
这句话的核心是Java基本类型的传递特性:Java中int、char这类基本类型不属于对象体系,所有场景下都是按值传递,也就是说传递的永远是值的副本,不同方法中的基本类型变量会存在各自独立的栈内存空间,不可能指向同一块内存地址。
示例演示
示例1:基本类型传递效果
public class PrimitiveDemo { // 方法1:修改传入的int参数 public static void changeInt(int num) { num = 200; System.out.println("changeInt方法内的num值:" + num); } public static void main(String[] args) { int originNum = 10; System.out.println("调用changeInt前main方法内的originNum值:" + originNum); changeInt(originNum); System.out.println("调用changeInt后main方法内的originNum值:" + originNum); } }
运行结果:
调用changeInt前main方法内的originNum值:10 changeInt方法内的num值:200 调用changeInt后main方法内的originNum值:10
结果说明:main方法里的originNum和changeInt方法里的num是完全独立的两个变量,changeInt拿到的只是originNum的值副本,不管怎么修改都不会影响原变量,符合“两个方法无法引用同一个int实例”的描述。
示例2:对比包装类的引用传递效果
为了更直观体现差异,我们用自定义的int包装类做演示:
public class WrapperDemo { // 自定义可变int包装类 static class IntHolder { int value; public IntHolder(int value) { this.value = value; } } // 修改包装类的属性 public static void changeHolder(IntHolder holder) { holder.value = 200; System.out.println("changeHolder方法内的value值:" + holder.value); } public static void main(String[] args) { IntHolder originHolder = new IntHolder(10); System.out.println("调用changeHolder前main方法内的value值:" + originHolder.value); changeHolder(originHolder); System.out.println("调用changeHolder后main方法内的value值:" + originHolder.value); } }
运行结果:
调用changeHolder前main方法内的value值:10 changeHolder方法内的value值:200 调用changeHolder后main方法内的value值:200
结果说明:两个方法此时引用的是同一个IntHolder对象实例,修改属性会同步生效,这就是基本类型和包装类的核心差异,也是Java需要设计基本类型包装类的原因之一。
内容的提问来源于stack exchange,提问作者MRM
相关产品推荐
相关产品推荐

