我在面试中被问到以下问题
int i =0
整数 e1 = 0
它们将在哪个内存中创建?
根据我的理解
对于整数 i =0
原始数据类型进入堆栈内存,并且
对于整数e1=0
包装类进入堆内存的整数
请帮助正确理解?
这是一个非常有趣的问题。
使用原语,分配将在堆栈中进行,并且将花费其所需的4个字节,进行一些舍入。
但当谈到包装时,事情真的开始发展了。如果我们将其与C进行比较,则4个字节将在堆中分配,这一事实使e1成为一个指针。
假设我们使用64位机器,e1将在堆栈中占用8字节(舍入)。
并且堆数据块至少具有小的4-8字节报头。
在这些类型的实现中,我没有看到每个实例使用更多的内存,因为所有助手成员和常量都是静态的,因此所有实例都将使用用于该类型的“数据段”中的相同数据块。
因此,添加所有这些表明包装器的分配总是大于原语。例如-通过极其粗略的计算,您会得到如下内容:
原语:int-
至于性能,似乎原语的操作速度将比包装器快得多,但这是另一个讨论。
希望这些信息有所帮助。
它比这更复杂一些。
首先,您需要知道< code>i和< code>ei变量是否是object1的局部变量或字段(静态或实例)。
如果它们是局部变量:
i
在堆栈上
ei
位于堆栈上(引用),它引用堆中的对象如果它们是实例或类的字段:
i
位于堆上(作为实例或类的一部分)
ei
位于堆上(作为实例或类的一部分),它引用堆中的对象最后,值得注意的是,整数 e1 = 0
可能根本不会分配新的 Integer
对象。存储在 e1
中的引用可能是对已存在的对象的引用。
< sup>1 -还有另一种情况。如果< code>i或< code>ei是由内部类声明引用的局部变量,那么当内部类被实例化时,将制作第二个副本。对于该副本,空间使用将如同< code>i / ei
是内部类的字段。
本小节我们将学习 Java 的包装类,我们将了解到什么是包装类,为什么需要包装类,Java 提供的包装类有哪些,各种包装类的常用方法和常量介绍,什么是装箱操作以及什么是拆箱操作等内容。 1. 什么是包装类 Java 有 8 种基本数据类型,Java 中的每个基本类型都被包装成了一个类,这些类被称为包装类。 包装类可以分为 3 类:Number、Character、Boolean,包装类的架构图如下
本文向大家介绍Java Float包装器类,包括了Java Float包装器类的使用技巧和注意事项,需要的朋友参考一下 Float是提供的包装类,用于包装float基本值。 让我们创建一个带有float原语的Float对象。 现在让我们从字符串创建一个Float对象。 下面的示例显示了上面讨论的两种输出方法。 示例 输出结果
主要内容:装箱和拆箱,包装类的应用在 Java 的设计中提倡一种思想,即一切皆对象。但是从数据类型的划分中,我们知道 Java 中的数据类型分为基本数据类型和引用数据类型,但是基本数据类型怎么能够称为对象呢?于是 Java 为每种基本数据类型分别设计了对应的类,称之为 包装类(Wrapper Classes),也有地方称为外覆类或数据类型类。 包装类和基本数据类型的关系如下表所示。 基本数据类型及对应的包装类 序号 基本数据类型
问题内容: 问题是创建现有对象的动态增强版本。 我无法修改的。相反,我必须: 子类化 将现有对象包装在新对象中 将所有原始方法调用委托给包装的对象 实现另一个接口定义的所有方法 要添加到现有对象的接口是: 使用Byte Buddy,我设法继承了类并实现了我的接口。问题是委派给包装的对象。我发现做到这一点的唯一方法是使用反射速度太慢(我在应用程序上负担很重,性能至关重要)。 到目前为止,我的代码是:
问题内容: 我有一个Java应用程序,可从中构建一个依赖于许多第三方jar的jar,打包此应用程序以供最终用户分发的最佳/常见方式是什么? 问题答案: 最好的方法是使用Maven2之类的构建工具或类似的工具,并使用它来管理依赖项并构建多合一软件包。 否则,您通常会被混乱的清单文件所困扰。虽然,像Eclipse或NetBeans这样的IDE可能会帮助您一点。
我试图了解Java原语和包装器是如何工作的。让我们考虑以下示例。 由于整数是不可变的和非原语,语句将编译为以下内容 这将创建大约10000个整数对象(每次调用新)和将整数拆箱为int的成本。 我说的对吗?