Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 - Fatal编程技术网

按值确认Java复制

按值确认Java复制,java,Java,关于可变位置的问题,并确认执行了副本 @org.junit.Test public void question() { int c[] = new int[]{0}; /*Questions: * 1.) Is j in the stack? * 2.) When assigning j, is a copy of the value c[0] performed?*/ int j = c[0]; } 是的,c[0]的结果被复制到j变量中,因为int

关于可变位置的问题,并确认执行了副本

@org.junit.Test
public void question() {
    int c[] = new int[]{0};
    /*Questions:
     * 1.) Is j in the stack?
     * 2.) When assigning j, is a copy of the value c[0] performed?*/
    int j = c[0];
}

是的,
c[0]
的结果被复制到
j
变量中,因为int是一种基本类型,并且是按值复制的。如果要使用
Integer
类,则会复制引用而不是值本身。

是的,
c[0]
的结果会复制到
j
变量中,因为int是一种基本类型,并且是按值复制的。如果要使用
Integer
类,则将复制引用而不是值本身。

Java只复制值。有时这些值是对对象的引用,但这里的值是
int
原语。
j
的值在堆栈上,因为它是一个局部变量(与
c
的值一样,后者是对自身位于堆上但很快将被垃圾收集的数组的引用)。

Java只复制值。有时这些值是对对象的引用,但这里的值是
int
原语。
j
的值在堆栈上,因为它是一个局部变量(与
c
的值一样,后者是对自身位于堆上但很快将被垃圾收集的数组的引用)。

Java总是按值传递。它的意思是当X=Y时,X得到Y的值。如果是像int这样的原语,那么值会被复制,因为原语可以直接作为值使用。如果是对象,则复制对对象的引用,因为对象仅通过引用可用

Java总是按值传递。它的意思是当X=Y时,X得到Y的值。如果是像int这样的原语,那么值会被复制,因为原语可以直接作为值使用。如果是对象,则复制对对象的引用,因为对象仅通过引用可用

我认为
j
是一个副本。测试它的方法是修改
c[0]
并查看
j
的值是否更改我没有考虑如何按照您的建议进行测试。我试过了,并按照您的建议进行了复制。@jpuriol所说的术语是“别名”,即两个引用指向同一个对象,并且该对象被修改(而不是将引用更改为指向另一个对象)。与别名相关的问题是使用不可变对象的主要动机之一(所有的基本包装,如
Integer
都是不可变的)。我认为
j
是一个副本。测试它的方法是修改
c[0]
并查看
j
的值是否更改我没有考虑如何按照您的建议进行测试。我试过了,并按照您的建议进行了复制。@jpuriol所说的术语是“别名”,即两个引用指向同一个对象,并且该对象被修改(而不是将引用更改为指向另一个对象)。与别名相关的问题是使用不可变对象的主要动机之一(所有的基本包装,如
Integer
都是不可变的)。不,Java总是复制值。如果OP使用了
Integer
类,那么数组元素的值将是一个引用,并且该值将被复制。但是它仍然会被复制-在
j
c[0]
之间没有持久的关联。。。如果将
c[0]
的值更改为不同的引用,则不会更改
j
。这样会更好一些,但它表明数组元素的值将是
整数
对象-不会是。变量的值,包括数组元素,从来都不是对象-只有引用或基元类型值。语句
j=c[0]
总是复制数组元素的值
c[0]
,无论这是否是引用。@JonSkeet我喜欢在回答问题时感到开悟,谢谢Daisy Shipton:)不,Java总是复制值。如果OP使用了
Integer
类,那么数组元素的值将是一个引用,并且该值将被复制。但是它仍然会被复制-在
j
c[0]
之间没有持久的关联。。。如果将
c[0]
的值更改为不同的引用,则不会更改
j
。这样会更好一些,但它表明数组元素的值将是
整数
对象-不会是。变量的值,包括数组元素,从来都不是对象-只有引用或基元类型值。语句
j=c[0]
总是复制数组元素的值
c[0]
,无论这是否是引用。@JonSkeet我喜欢在回答问题时感到开朗,谢谢Daisy Shipton:)谢谢确认。在Java中无法保存对原语的引用?@Rodrigomez引用是指向对象的“指针”(或多或少)。引用和基本体都是立即值,不能有对基本体的引用。根据您的目标,您可以引用一个基元数组(数组是一个对象),或者使用包装类,例如
Integer
AtomicInteger
。感谢您的确认。在Java中无法保存对原语的引用?@Rodrigomez引用是指向对象的“指针”(或多或少)。引用和基本体都是立即值,不能有对基本体的引用。根据您的目标,您可以引用一个基元数组(数组是一个对象),或者使用包装类,例如
Integer
AtomicInteger