【发布时间】:2015-07-22 22:59:45
【问题描述】:
我正在学习 Java 中的引用和数据类型,但这段特殊的代码仍然让我感到困惑。我知道 Java 中的所有原始类型都是值类型(字节、短、整数、长、浮点、双精度、布尔值、字符),当您使用字符串或对象时,它是引用类型。当我被教导声明和初始化一个变量时,我被告知要把它想象成一个盒子。因此,如果我创建一个变量“y”并给它一个值“5”,就像我创建了一个名为“y”的盒子,其中包含了 5 的值。我的老师说,如果我然后尝试在 a 中调用 y方法(查看下面的代码以获取更多详细信息)该值将保持不变,因为它是一个原始数据类型,所以我只传入 5,而不是包含 5 的变量。好吧,我很困惑,因为如果我传入值5,为什么下面的方法不加一个呢。
public class ReferenceAndValueTypes {
public static void main(String[] args) {
int y = 5;
addOneTo(y);
System.out.println(y);
}
static void addOneTo(int number){
number = number + 1;
}
}
输出是 5,这让我很困惑。老师说因为 int 是一个值类型,所以我们没有传入 y 变量,也不是对那个变量进行操作,而是对那个变量的值进行操作。但是,该变量的值为 5,并且由于该方法加一,它不应该是 6 吗?或者,是不是因为 y 是值类型,所以该方法无法使用它,所以它只需要打印出 y 的初始值,即 5?
【问题讨论】:
-
您正在对该变量的副本进行操作。
-
该值为 6。但仅在 addOneTo 方法中。 (尝试在您的 addOneTo 方法中打印出数字变量)......您将值“5”传递给您的 add-method。你给它加 1 --> 给出“6”。但是从你调用它的地方..值没有改变(它应该怎么......你只是将 VALUE 传递给你的方法)
-
@Seelenvirtuose 我不确定这是一个合理的欺骗,因为 OP 不理解传递值和传递引用之间的区别。
-
谢谢大家的解释,现在更有意义了!
-
@PatrickCollins 当然,即使不知道要搜索的单词,也很难找到可能回答您的问题。但这并不意味着这个问题本身就是一个新问题。可能的“重复”仍然包含 Carson Clark 需要知道的所有答案。至少,我(有点)同意你的观点,这就是我没有投反对票的原因。