首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象而不引用

对象而不引用
EN

Stack Overflow用户
提问于 2016-03-09 03:13:32
回答 3查看 7.8K关注 0票数 2

我一直在实践基于组件的设计模式,我想知道当您初始化一个没有引用的变量时--即初始化为null -- Java是否继续并在内存中赋予一个具有变量大小的空间,即使它被设置为null,以便最终当您需要用类的一个新实例重新初始化它时,它只是复制新实例的字段?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-09 03:27:09

无论变量包含null还是对对象的引用,其类型为引用类型的变量占用的空间都是相同的。

但是,变量只保存引用..。而不是物体本身。

..。当您需要用类的新实例重新初始化它时,它只是复制新实例的字段吗?

呃..。不是的。当您稍后“初始化”该变量时,您将为该变量分配一个引用。您不是在复制对象的字段。

例如:

代码语言:javascript
运行
复制
  SomeType s = null;     // the declaration sets aside space for one
                         // reference, and the initialization assigns
                         // `null` to it.

  s = new SomeType(...)  // the 'new' expression creates the object and 
                         // which allocates the space, etcetera
                         // the assignment merely assigns the reference
                         // for that object to 's'.

如果"s“是一个仍然初始化为null的"Sometype”数组,那么假设在为相关类型的数组创建新的有效引用之前,只保存一个引用的空间是合理的吗?

数组类型也是引用类型。所以,没错,答案是一样的。声明SomeType[] s将为一个引用保留空间。

票数 3
EN

Stack Overflow用户

发布于 2016-03-09 03:23:47

我在想,当您初始化一个没有引用的变量时,如果初始化为null,Java是否会继续并在内存中属性一个具有变量大小的空间,即使它被设置为null。

是的,内存是为变量分配的,但是这只是内存的一个很小的地址空间,没有其他的。没有为最终对象分配内存。

因此,最终当您需要用类的新实例重新初始化它时,它只是复制新实例的字段?

当您创建任何东西的实例时,就会在堆上为对象分配内存,不管对象是否被分配给变量、没有变量或50个变量,任何引用对象的变量都有其地址空间指向堆中对象的位置(也许--我不认为实际的机制,即如何完全指定)

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 04:33:57

查看有关对象创建的oracle文档页面

代码语言:javascript
运行
复制
Point originOne;

--如果您这样声明originOne,那么它的值将是未定的,直到一个对象被实际创建并分配给它。简单地声明一个引用变量并不会创建一个对象

For that, you need to use the new operator,如下一节所述。在代码中使用对象之前,必须将对象分配给originOne

实例化类

新操作符通过为新对象分配内存并返回对该内存的引用来实例化类。新操作符还调用对象构造函数。

注意:短语“实例化一个类”的意思与“创建一个对象”When you create an object, you are creating an "instance" of a class, therefore "instantiating" a class的意思相同。

新运算符返回对它创建的对象的引用。此引用通常分配给适当类型的变量,如下所示:

代码语言:javascript
运行
复制
Point originOne = new Point(23, 94);

我希望上面的图片能澄清你的疑问。

引用的大小将是4字节或8字节。看看这个SE问题:

Java中的对象引用有多大,它包含了哪些信息?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35882189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档