作为 Java 开发人员,你可能知道 Java 编程语言支持两种不同类型的数据,这些包括原始数据类型和对象。在最近的 Java 版本中,引入了一种名为 ValueType 的新类型,虽然在代码中处理对象和值类型的方式不应该有任何区别,但 ValueTypes 在底层确实存在显着差异。简而言之:ValueTypes 看起来像对象,但它们的行为类似于原语。本 Java 编程教程讨论了 Java 中新引入的 ValueType。
Java中有哪些数据类型?
布尔数据类型:Java 中的布尔数据类型只能用于存储两个值:真或假。
字符数据类型:字符数据类型可以存储任何 Unicode 字符。例如:a、A、z、1、4、$、# 和 !都是字符数据类型的示例(只要它们用引号括起来)。
短数据类型:短数据类型可以存储 -32768 到 32767 之间的任何数值。
整数数据类型:整数数据类型可以存储任何数字整数值。这是 Java 中原始的原始数据类型,用于存储整数。
Long 数据类型:long 数据类型可以存储更大的整数。
浮点数据类型:浮点数据类型可以存储最多三位精度的实数。这非常适合存储 0.5 或 32.72 等数字。也称为小数点数。
双精度数据类型:双精度数据类型可以存储最多六位精度的实数。这是存储 23.198 或 -32.45 等数字的好选择。
Java 中的 ValueType 是什么?
ValueType 是一种表示值的类型。这类似于 Java 中原始类型的表示方式。主要区别在于 ValueType 是引用类型,这意味着它可以存储在变量中或作为参数传递给方法。
ValueType 是 Java 8 中的一个新特性,它使得定义行为类似于原语的自定义类型成为可能。例如,你可以为二维坐标系中的点创建 ValueType。这使得处理复杂的数据结构变得容易,而无需使用类或数组。
在 Java 8 中,引入了新的 ValueType 以提高性能并使代码更加简洁。ValueType 是不可变且无法更改的对象的包装器。这使得它非常适合在不需要更改对象的情况下使用,例如在方法的返回值中。
Java中新的ValueType的特点是什么?
Java ValueType 是不可变的
不变性是 Java 编程语言的另一个内置特性。一旦创建,不可变对象就无法更改;也就是说,你不能在创建不可变对象后修改它的内容。请注意,在 Java 中,所有包装类(如 String、Integer、Boolean、Byte 和 Short)都是不可变的。不可变对象可帮助你以更干净、线程安全的方式编写代码。
ValueType 是不可变的,这意味着一旦定义了它,就不能更改它的值。这使得它们非常适合用于哈希表和集合等数据结构。
Java ValueType 没有标识
ValueType 的实例没有标识,(即,只有当它们各自的内部状态相同时,它们才被认为是相同的)。当我们可以在没有身份的情况下反对时,这意味着重要的是对象的价值。例如,值为 100 的 int 与代码中具有相同值的任何其他 bint 相同。
Java ValueType 没有任何引用或对象标头
当你将 ValueType 的实例作为参数传递给方法时,它们会被完全复制。此外,它缺少对象头或标识,因此缺少跨值类型的继承。
Java ValueType 不支持继承或多态
值类型与对象的区别在于对值类型的不可变引用。因此,它也缺乏继承和多态性。其中有几个,比如没有对象头,是实现细节;其他是设计选择。
ValueType 的多态性没有任何意义,因为 ValueType 不包含任何类信息并且直接存储。因此,Java 虚拟机 (JVM) 必须能够从程序而不是对象中推断出对象的类型。
结语
值通常以块的形式从主内存读入 CPU 缓存,这比页面小得多。一个页面的大小可以小到 4096 字节(4KB),也可以大到 2MB(64K 到 2MB); 一个高速缓存行可以小到 16 或 32 个字节。