Java 参考变量的进展?
当在方法中使用原始变量作为参数时,我试图理解对象和原始变量之间的区别 有一些使用参考变量的示例:Java 参考变量的进展?,java,variables,object,reference,Java,Variables,Object,Reference,当在方法中使用原始变量作为参数时,我试图理解对象和原始变量之间的区别 有一些使用参考变量的示例: public class Test1 { public static void main(String[] args) { int[] value = {1}; modify(value); System.out.println(value[0]); } public static void modify(int[] v) {
public class Test1 {
public static void main(String[] args) {
int[] value = {1};
modify(value);
System.out.println(value[0]);
}
public static void modify(int[] v) {
v[0] = 5;
}
}
结果:5
public class Test2 {
public static void main(String agrs[]) {
Integer j = new Integer(1);
refer(j);
System.out.println(j.intValue());
}
public static void refer(Integer i) {
i = new Integer(2);
System.out.println(i.intValue());
}
}
结果:2 | 1
那么这里有什么不同呢?
v[0]=5
,就像说获取当前v的引用的第0个元素并使其为5。
i=newinteger(2)
,就像说将i更改为2的Integer对象引用
在一种情况下,您通过引用更改内部值,在后一种情况下,您更改引用本身。回想一下,数组引用是按值传递的。数组本身是一个对象,它根本不被传递(这意味着如果你把数组作为参数传递,你的e实际上传递了它的内存地址位置)
在modify()。因此,当您打印结果时,您会得到:5
,因为该值已更改
在第二种情况下,您正在本地创建类型为Integer
的新对象<退出方法refere()
时,code>i
将具有相同的值。在它里面你打印2
,然后你打印i
,这是1
,因此变化不会反映出来。这里的区别在于它们是不同的
在第一个示例中,您将参数传递给另一个方法,该方法正在修改其元素之一,该元素在调用方可见。在第二种情况下,您将变量分配给一个新值,该值在调用方不可见,因为Java具有传递值语义
NB“Primary variable”在Java中没有任何意义
我不知道你的标题中的“高级”一词与任何事情都有什么关系。在java数组中是基元类型,整数是对象类型 对于基本体,它是按值传递实际值(例如3) 对于对象,通过值传递对对象的引用 在第一个例子中, 您正在更改数组中的值 而在另一个例子中,, 您正在将i的引用更改为对象值为2的其他内存位置。
当返回到主函数时,因为您没有返回值。其参考范围仅限于“参考”方法。您所说的“主要变量”是什么意思?这里的主要区别在于,您在第一个版本中使用了一个数组……在第二个示例中,我使用了主变量的包装器,如果我使用i,j作为主变量,结果是相同的。所以我不清楚这件事。有什么想法吗?@Thangnv这叫做原始变量。这里没有相关的原始值。OP的意思仍然是个谜。。请解释一下,这样我才能从错误中吸取教训。谢谢。不要使用“通过引用传递”这个词,它们有精确的含义,不适用于Java。这正是Joni所说的。任何理解“参考传递”真正含义的人都会对此感到非常困惑。Java对所有参数都使用传递值——只是引用类型表达式的值是一个引用,而不是一个对象。无论如何,编辑。谢谢你的评论。@GrijeshChauhan:有些是的。这是不幸的,也是不正确的。我希望作者能特别注意准确性——我对他们不这样做感到非常生气:(我仍然会调整你的第一段,说数组引用是按值传递的。数组本身是一个对象,根本没有传递。Advance-所以,我确实想了解按值传递和按引用传递。你给我一些文档或链接帮助吗?谢谢!你还没有解释什么是“Advance”d在这里的意思是。它不是Java中的一个技术术语,也没有任何其他明显的相关性。你也没有解释“primary”是什么意思。你可以像其他人一样,尝试一下语言规范,或者《Java编程语言》一书。@Thangnv,EJP:我喜欢我不太懂Java,但我学会了核心Java。