所以今天有人问我这个问题。
Integer a = 3;
Integer b = 2;
Integer c = 5;
Integer d = a + b;
System.out.println(c == d);
该程序将输出什么?它返回true。我回答由于我对自动装箱(和自动装箱)的了解,它将始终打印为false。我的印象是,为Integer分配a =
3将创建一个新的Integer(3),以便an ==将对引用进行评估,而不是原始值。
谁能解释一下?
缓存在-128到127之间的框值。装箱使用Integer.valueOf
方法,该方法使用缓存。超出范围的值不会被缓存,并且始终创建为新实例。由于您的值属于缓存范围,因此使用==运算符可以使值相等。
引用Java语言规范:
如果装箱的值p为true,false,一个字节,\ u0000到\ u007f范围内的char 或-128和127之间 的
整数或短数,则令r1和r2为任何两次装箱转换的结果的p。 r1 == r2总是这样。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7
我试图了解Java原语和包装器是如何工作的。让我们考虑以下示例。 由于整数是不可变的和非原语,语句将编译为以下内容 这将创建大约10000个整数对象(每次调用新)和将整数拆箱为int的成本。 我说的对吗?
问题内容: 扩展和装箱Java原语。 我知道不可能将包装器类从一个扩展到另一个,因为它们不是来自同一继承树。为什么无法将原语扩展为另一种原语类型并自动装箱已扩展的原语? 假定可以将byte参数传递给需要int的方法,为什么不能将以下示例中的字节扩展为int然后装箱为Integer? 在上面的示例中,被编译器接受但被拒绝。 问题答案: 简短答案 Java语言仅支持某种程度的粗心。 更长的答案 我相信
两者的计算结果都为false。(顺便说一句,比较是不必要的,因为类不会重写Object中的equals。) 和都是,因为它们可比,没有错误。比较两个具有不同声明的泛型类型的对象是非法的。 在进一步检查时,字段将通过调用包私有的本机方法,如下所示: 除了Java文档对“表示基元类型”的模糊暗示之外,我找不到任何关于这方面的文档。这个领域有什么用处吗?它在包装类本身中没有使用。 (编辑) 是真的。 还
我们使用编年史地图在大量不同的存储中支持堆外持久性,但在最简单的用例中遇到了一些问题。 首先,以下是我为简化创建而编写的帮助程序: 它使用https://github.com/phatak-dev/java-sizeof进行对象大小估计。以下是我们想要支持的用法类型: 但它抛出了一个例外: [错误]线程“main”java中出现异常。ClassCastException:键必须是int,但它是ja
本节将覆盖A-Frame原语元素的基本概念以及它们与实体-组件框架的关系。如果你需要了解具体如何使用HTML和原语,可以参阅: 开发指南中构建一个基本场景一节。 HTML A-Frame基于 HTML 和 DOM,对于自定义元素使用一个polyfill。HTML是Web的基石,提供了最容易访问的计算机语言。无需安装或编译构建,创建HTML只需要使用文本, 然后在浏览器中打开该HTML文件。由于A-
黑盒测试,白盒测试与灰盒测试的比较和区别如下所示: 编号 黑盒测试 白盒测试 灰盒测试 1 不需要了解内部工作结构(代码)。测试用例只需要GUI(图形用户界面)。 测试需要了解内部工作结构(软件编码)。 部分了解内部工作结构。 2 黑盒测试也称为功能测试,数据驱动测试和封闭盒测试。 白盒测试也称为结构测试,透明盒测试,基于代码的测试和透明测试。 灰盒测试也称为半透明测试,因为测试人员对编码知识有限