Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 参考变量的进展?_Java_Variables_Object_Reference - Fatal编程技术网

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。