Java Byte 类
最后修改时间:2025 年 4 月 13 日
java.lang.Byte 类是原始类型 byte 的包装类。它提供了处理 byte 值的实用方法,包括转换、比较和解析。作为 Java 包装类系统的一部分,Byte 允许 byte 原始类型在面向对象的上下文中使用,例如集合和泛型类。
由于 Byte 是 final 和 不可变的,因此创建后其值无法更改。它扩展了 Number 类,继承了数值能力,并实现了 Comparable 接口,从而可以在 Java 集合和排序机制中比较 byte 值。
Byte 类方法
Byte 类提供了几个用于 byte 操作的静态和实例方法。一些关键方法包括
parseByte(String s)- 将字符串转换为byte,如果输入无效,则抛出NumberFormatException。valueOf(byte b)- 返回一个表示指定byte值的Byte实例。byteValue()- 从Byte对象中提取原始byte值。compare(Byte b1, Byte b2)- 比较两个Byte值,根据它们的顺序返回负数、零或正数。toString()- 将Byte对象转换为其字符串表示形式。
通过集成这些方法,Java 确保了 byte 原始类型、字符串表示形式和面向对象结构之间的无缝转换。 Byte 类通常用于需要类型安全、数值比较和数据结构中存储的场景。
创建 Byte 对象
Byte 对象可以使用静态工厂方法创建。 valueOf 可能会缓存常用值以获得更好的性能。
void main() {
Byte byte1 = Byte.valueOf((byte) 100);
Byte byte2 = Byte.valueOf("100");
// Using autoboxing
Byte byte3 = 100;
System.out.println("byte1: " + byte1);
System.out.println("byte2: " + byte2);
System.out.println("byte3: " + byte3);
// Comparing objects
System.out.println("byte1 equals byte2: " + (byte1.equals(byte2)));
System.out.println("byte2 equals byte3: " + (byte2.equals(byte3)));
}
此示例演示如何创建 Byte 对象。请注意,由于缓存,使用 valueOf 时,小的 byte 值(介于 -128 和 127 之间)可能引用同一个对象。
解析 Byte 值
Byte 类提供了解析 byte 值字符串表示形式的方法。 parseByte 方法将字符串转换为原始 byte,而 valueOf 返回一个 Byte 对象。对于无效输入,这两种方法都可以抛出 NumberFormatException。
void main() {
// Parsing decimal strings
byte b1 = Byte.parseByte("100");
Byte b2 = Byte.valueOf("100");
// Parsing hexadecimal strings
byte b3 = Byte.parseByte("A", 16);
Byte b4 = Byte.valueOf("7F", 16);
System.out.println("b1: " + b1);
System.out.println("b2: " + b2);
System.out.println("b3: " + b3); // 10 in decimal
System.out.println("b4: " + b4); // 127 in decimal
try {
// This will throw NumberFormatException
byte b5 = Byte.parseByte("200");
} catch (NumberFormatException e) {
System.out.println("Error: " + e.getMessage());
}
}
此示例演示如何从字符串解析 byte 值。 radix 参数允许解析十六进制(base 16)值。请注意,“200”无效,因为它超过了 Byte.MAX_VALUE (127),导致 NumberFormatException。
比较 Byte 值
可以使用实例方法或静态实用方法比较 Byte 值。 compareTo 方法比较两个 Byte 对象,而 compare 比较原始 byte。两者都返回负数、零或正数,指示排序。
void main() {
Byte byte1 = 50;
Byte byte2 = 100;
byte byte3 = 50;
// Instance comparison
System.out.println("byte1.compareTo(byte2): " + byte1.compareTo(byte2));
System.out.println("byte1.compareTo(Byte.valueOf(byte3)): " +
byte1.compareTo(Byte.valueOf(byte3)));
// Static comparison
System.out.println("Byte.compare(byte1, byte2): " +
Byte.compare(byte1, byte2));
System.out.println("Byte.compare(byte3, byte1.byteValue()): " +
Byte.compare(byte3, byte1.byteValue()));
// Equality comparison
System.out.println("byte1.equals(byte2): " + byte1.equals(byte2));
System.out.println("byte1.equals(Byte.valueOf(byte3)): " +
byte1.equals(Byte.valueOf(byte3)));
}
此示例演示了比较 byte 值的不同方法。 compareTo 和 compare 方法对于小于、等于或大于比较返回 -1、0 或 1。 equals 方法检查对象之间是否完全相等。
转换 Byte 值
Byte 类扩展了 Number,提供了将 byte 值转换为其他原始数值类型的方法。这些包括 intValue、doubleValue 等。 toString 方法将 byte 转换为字符串表示形式。
void main() {
Byte byteValue = 100;
// Converting to other primitive types
System.out.println("intValue: " + byteValue.intValue());
System.out.println("doubleValue: " + byteValue.doubleValue());
System.out.println("floatValue: " + byteValue.floatValue());
System.out.println("longValue: " + byteValue.longValue());
System.out.println("shortValue: " + byteValue.shortValue());
// String conversions
System.out.println("toString: " + byteValue.toString());
System.out.println("static toString: " + Byte.toString((byte) 100));
System.out.println("toHexString: " +
Integer.toHexString(byteValue & 0xFF));
}
此示例显示了 Byte 类中可用的各种转换方法。虽然 Byte 提供了基本的字符串转换,但对于十六进制表示,我们使用 Integer.toHexString 以及正确的 byte 掩码来避免符号扩展问题。
Byte 常量和大小
Byte 类定义了有用的常量,用于表示 byte 可以表示的最小值和最大值。它还提供了 SIZE 常量,表示用于存储 byte 值的位数(在 Java 中始终为 8 位)。
void main() {
System.out.println("Byte.MIN_VALUE: " + Byte.MIN_VALUE);
System.out.println("Byte.MAX_VALUE: " + Byte.MAX_VALUE);
System.out.println("Byte.SIZE: " + Byte.SIZE + " bits");
System.out.println("Byte.BYTES: " + Byte.BYTES + " bytes");
// Demonstrating byte range
byte minByte = Byte.MIN_VALUE;
byte maxByte = Byte.MAX_VALUE;
System.out.println("minByte - 1: " + (minByte - 1));
System.out.println("maxByte + 1: " + (maxByte + 1));
// Binary representation
System.out.println("MIN_VALUE binary: " +
Integer.toBinaryString(minByte & 0xFF));
System.out.println("MAX_VALUE binary: " +
Integer.toBinaryString(maxByte & 0xFF));
}
此示例演示了 Byte 类常量和 byte 大小信息。 请注意,对 byte 进行算术运算会将它们提升为 int,因此溢出不会以与纯 byte 运算相同的方式发生。 二进制表示显示了正确屏蔽后的实际 8 位模式。
Byte 哈希码和相等性
Byte 类覆盖了 Object 中的 hashCode 和 equals。 hashCode 返回 byte 值本身,而 equals 比较包装的 byte 值。 这确保了在集合中使用 Byte 对象时的正确行为。
void main() {
Byte byte1 = 100;
Byte byte2 = 100;
Byte byte3 = 50;
// Hash code examples
System.out.println("byte1.hashCode(): " + byte1.hashCode());
System.out.println("byte2.hashCode(): " + byte2.hashCode());
System.out.println("byte3.hashCode(): " + byte3.hashCode());
// Equality examples
System.out.println("byte1.equals(byte2): " + byte1.equals(byte2));
System.out.println("byte1.equals(byte3): " + byte1.equals(byte3));
// Using in HashSet
HashSet<Byte> byteSet = new HashSet<>();
byteSet.add(byte1);
byteSet.add(byte2);
byteSet.add(byte3);
System.out.println("Set size: " + byteSet.size());
System.out.println("Set contains 100: " + byteSet.contains((byte) 100));
}
此示例演示了 Byte 对象的 hashCode 和 equals 行为。 相同的 byte 值产生相同的哈希码并且被认为是相等的。 由于这些实现,HashSet 示例显示了正确的集合行为。
Byte 解码和编码
Byte 类可以与字符编码操作结合使用。 虽然 Java 的 String 在内部使用 UTF-16,但 byte 通常用于 ASCII 或其他单字节字符编码。 此示例显示了基本的 byte/char 转换。
void main() {
// ASCII character to byte
byte letterA = (byte) 'A';
Byte letterB = (byte) 'B';
System.out.println("letterA: " + letterA);
System.out.println("letterB: " + letterB);
// Byte to character
char aChar = (char) letterA;
char bChar = (char) letterB.byteValue();
System.out.println("aChar: " + aChar);
System.out.println("bChar: " + bChar);
// String to bytes and back
String text = "Hello";
byte[] bytes = text.getBytes();
System.out.print("Bytes: ");
for (byte b : bytes) {
System.out.print(b + " ");
}
System.out.println();
String reconstructed = new String(bytes);
System.out.println("Reconstructed: " + reconstructed);
}
此示例显示了 byte 和字符之间的基本转换。 请注意,这种简单的方法适用于 ASCII 字符 (0-127),但可能无法正确处理扩展字符集。 要获得完整的字符编码支持,请将适当的 Charset 对象与 String.getBytes 和 String 构造函数一起使用。
来源
在本文中,我们通过实际示例介绍了 Java Byte 类的所有主要方面。 当 byte 值需要被视为对象或者需要 byte 操作的实用方法时,Byte 包装类是必不可少的。
作者
列出所有Java教程。