gpt4 book ai didi

java - 原始类型的包装器也是原始类型吗?

转载 作者:行者123 更新时间:2023-12-04 00:55:00 24 4
gpt4 key购买 nike

我对 Java 中的数据类型感到困惑。我在 Internet 上看到很多图像将 Java 中的数据类型表示为一棵树,这让我对以前的想法犹豫不决。这些树的示例如下所示:Figure 1: Java data types schema.

所以,在另一个 SO post , Buhake Sindi 指出:

Boolean is a wrapper of a primitive type

根据前面Java中数据类型的树表示,我的问题是:

  1. 原始数据类型的包装器也是原始数据类型?例如 boolean 值整数字符
  2. 树中的Object 数据类型应该在哪里?据我了解,Object 是一个内存区域,可以包含 Java 中的任何类型;从基元到程序员创建的类。因此,对象 可能同时包含原始数据类型和非原始数据类型。这是真的吗?

最佳答案

不,原语的包装器不是原语。这就是它们的重点:当需要对象引用而不是原始类型(例如在 List 中)时,它们用于包装原始类型。

在该树形图中,“Boolean”和“Integer”不是类/类型名称,它们只是标签(就像“Floating-point”一样)。

Object 适合“非原始”顶部的那棵树。

因此,例如,包装器将在非原始类型下:

               Data Type                 /    \                /      \               /        \              /          \      Primitive Types    Non-Primitive Types (base class: Object)            /                         /                  \           /                         /                    \    Numeric Types         Primitive Wrapper Types         (etc.)         /                    /      |      \        /                    /       |       \  Integer Types           Char    Integer  Boolean      /     /   char

(显然这是非常不完整的。)

As I understand, Object is a memory region that can contain any type in Java; from primitives to classes created by the programmer.

不,它不是内存区域。这是一种类型。

So, Object may contain both primitive and non-primitive data types.

不,Object 类型(或其任何子类型)的变量、实例成员或参数只能包含对象引用,而不是像 int字符。这就是为什么我们有原语的包装器,所以我们可以(通过包装器)将它们存储在需要对象引用的地方。


另请注意,该图在另一种方面具有误导性:“浮点”不应位于“积分”之下。在计算机科学中,“整数类型”是整数(在数学中,它比这更复杂)。这就是 JLS 将 NumericType 拆分为 IntegralTypeFloatingPointType (ref) 的原因。

并且 charintegral type在 Java 中。


FWIW,我在那个草图上的粗略传球看起来像这样:

enter image description here

希望 final 不那么压抑和丑陋。 :-) 请注意,我在各处重复“类型”以避免使用类名的出现,并且在使用关键字或类名时,我使用了字体(就像你原来的那样)来标注。

关于java - 原始类型的包装器也是原始类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48304498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com