执行有关变量放置并确认副本的问题。
@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];
}
答案 0 :(得分:3)
Java仅复制值。有时,这些值是对对象的引用,但此处的值是int
原语。 j
的值在栈中,因为它是一个局部变量(c
的值也是如此,它是对本身位于堆上但不久将被垃圾回收的数组的引用)。
答案 1 :(得分:1)
是的,由于int是原始类型,所以将c[0]
的结果复制到j
变量中,并按值复制。如果要使用Integer
类,则将复制引用而不是值本身。
答案 2 :(得分:1)
Java总是按值传递。这意味着当X = Y时,X获得Y的值。如果是像int这样的图元,则将值复制,因为图元可直接用作值。如果是对象,则对象的引用将被复制,因为对象只能通过引用获得。