提问人:retro_coder 提问时间:8/6/2022 更新时间:8/6/2022 访问量:50
无法理解具有块范围的 Java 中的按值传递
Not able to understand pass-by-value in Java with block scope
问:
我正在学习 Java 的基础知识,目前正在了解按值调用的工作原理。我确实知道,当您传入基元时,正在制作值的副本,因此原始值不受影响。当传递对象时,将使用引用变量的副本,从而修改原始对象。如果传递了 String 对象,则不会修改原始值,因为字符串是不可变的:
static void main(String args[]) {
String name = "Eric";
changeName(name);
System.out.println(name); //Eric
}
static void changeName(String nameVal) {
nameVal = "Gabriel";
}
但是,如果原始 String 对象没有如上所示进行修改,为什么在使用块作用域时它会更改?传递值和块作用域都接受引用变量的值,并尝试更改其内容,但一个不接受,另一个不接受。
static void main(String args[]) {
String name = "Eric";
{
name = "Gabriel";
}
System.out.println(name); //Gabriel
}
上面两个例子之间的主要区别是什么?
答: 暂无答案
评论
nameVal = "Gabriel"
不修改,它会在本地为其分配一个新值。你不修改盒子里的东西,你把 smoething 放在别的地方newVal
String name = "Eric"; { String nameVal = name; } System.out.println(name);