Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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 关于OOP中的引用和值_Java_Reference - Fatal编程技术网

Java 关于OOP中的引用和值

Java 关于OOP中的引用和值,java,reference,Java,Reference,在这个程序中,圆_b的变量“r”或“m”指向对象圆_a的变量,或者它们有一个值(没有指向另一个对象) 编辑: class MyClass {Integer var;} MyClass a = new MyClass(); a.var = 5; MyClass b = new MyClass(); b.var = a.var; b、 var指向a.var或有一个自值(b.var=5)?使用int重新回答您的原始问题,它们有值,而不是引用。使用Integer重新编辑,答案是相同的(它们有值,没有引

在这个程序中,圆_b的变量“r”或“m”指向对象圆_a的变量,或者它们有一个值(没有指向另一个对象)

编辑:

class MyClass {Integer var;}
MyClass a = new MyClass(); a.var = 5;
MyClass b = new MyClass(); b.var = a.var;

b、 var指向a.var或有一个自值(b.var=5)?

使用
int
重新回答您的原始问题,它们有值,而不是引用。使用
Integer
重新编辑,答案是相同的(它们有值,没有引用),但所讨论的值是对对象的引用。(稍后我将进一步介绍。)

每当你看到

a = b
…或

…您看到一个值被复制

对于像
int
这样的原语,我们需要说的几乎就这些了。:-)

当所讨论的值引用一个对象时,它被称为“对象引用”。它仍然被复制,但两个副本继续引用(指向)同一个对象

ASCII艺术在这里有时很有用

原语 此代码:

int a = 5;
int b = 0;
Integer a = new Integer(5); // This is effectively what you did with your = 5;, the primitive gets promoted
Integer b = null;
给了我们:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 0 | +---+ +---+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The Integer object | | primitive value: 5 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The HashMap object | | size: 0 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ 然后我们有:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 5 | +---+ +---+ +-------+ | a | +-------+ | (ref) |---+ +--------------------+ +-------+ | | | +---->| The Integer object | | primitive value: 5 | +---->| | +-------+ | +--------------------+ | b | | +-------+ | | (ref) |---/ +-------+ +-------+ | a | +-------+ | (ref) |---+ +-------+ | +--------------------+ +---->| | | The HashMap object | +---->| size: 0 | +-------+ | | | | b | | +--------------------+ +-------+ | | (ref) |---/ +-------+ 给了我们:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 0 | +---+ +---+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The Integer object | | primitive value: 5 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The HashMap object | | size: 0 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ 然后我们有:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 5 | +---+ +---+ +-------+ | a | +-------+ | (ref) |---+ +--------------------+ +-------+ | | | +---->| The Integer object | | primitive value: 5 | +---->| | +-------+ | +--------------------+ | b | | +-------+ | | (ref) |---/ +-------+ +-------+ | a | +-------+ | (ref) |---+ +-------+ | +--------------------+ +---->| | | The HashMap object | +---->| size: 0 | +-------+ | | | | b | | +--------------------+ +-------+ | | (ref) |---/ +-------+ 给了我们:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 0 | +---+ +---+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The Integer object | | primitive value: 5 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ +-------+ | a | +-------+ +--------------------+ | (ref) |-------->| | +-------+ | The HashMap object | | size: 0 | | | +--------------------+ +-------+ | b | +-------+ | null | +-------+ 然后我们有:

+---+ +---+ | a | | b | +---+ +---+ | 5 | | 5 | +---+ +---+ +-------+ | a | +-------+ | (ref) |---+ +--------------------+ +-------+ | | | +---->| The Integer object | | primitive value: 5 | +---->| | +-------+ | +--------------------+ | b | | +-------+ | | (ref) |---/ +-------+ +-------+ | a | +-------+ | (ref) |---+ +-------+ | +--------------------+ +---->| | | The HashMap object | +---->| size: 0 | +-------+ | | | | b | | +--------------------+ +-------+ | | (ref) |---/ +-------+ 我们得到:

+-------+ | a | +-------+ | (ref) |---+ +-------+ | +--------------------+ +---->| | | The HashMap object | +---->| size: 1 | +-------+ | | "foo" = "bar" | | b | | | | +-------+ | +--------------------+ | (ref) |---/ +-------+ 但是
a
b
变量仍然是完全独立的。如果为
b
分配新值:

b = new HashMap<String, String>();
b=newhashmap();
你会得到:

+-------+ | a | +-------+ +----------------------------+ | (ref) |-------->| | +-------+ | The first HashMap object | | size: 1 | | "foo" = "bar" | | | +----------------------------+ +-------+ | b | +-------+ +----------------------------+ | (ref) |-------->| | +-------+ | A different HashMap object | | size: 0 | | | +----------------------------+ +-------+ |a| +-------+ +----------------------------+ |(参考)|---------------->|| +-------+|第一个HashMap对象| |尺码:1| |“foo”=“bar”| | | +----------------------------+ +-------+ |b| +-------+ +----------------------------+ |(参考)|---------------->|| +-------+|另一个HashMap对象| |尺寸:0| | |
+----------------------------+ 这些变量是
int
,原语,它们以值的形式存储,请看

它们不是指针,所以它们不指向任何东西。是的,但是对于整数值,会发生什么?你这是什么意思?你能解释一下你想说什么吗?在
Integer
的情况下,你只需将新的引用分配给
var
,等价物是
a.var=Integer.valueOf(1)
,因此
a.var
b.var
将是相等的引用,但这并不重要,因为您不能更改整数(它是不可变的)。然后,que的答案是“不,该值是独立的,您可以更改变量a的值,并且不会修改变量b的值。”,非常感谢。@user3602030:小心点,你真的明白这一点。如果分配给
var
var=someOtherThing;
),则是独立的。但是,如果您修改
var
指向的内容(您不能使用
Integer
,但显然可以使用大多数类,例如
var.modifyMe()
),则会修改
var
指向的内容,而不是
var
;当然,这种修改可以通过指向同一对象的任何其他变量看到。很好的解释,但我的问题更为具体。请参阅我编辑的帖子plase:)。我说的不是类,我说的是属性。@user3602030:我看不到您的问题有任何未回答的部分,可以更具体一点吗?上面没有谈到类(类是无关的,对于静态成员、实例成员和局部变量都是如此)。重要的是值,以及容器的类型(成员、变量)是基本类型还是对象类型。