Java Long 类
最后修改时间:2025 年 4 月 13 日
java.lang.Long
类是原始类型 long
的包装类。它为 转换、比较和操作 long 值提供了广泛的实用方法,使其成为 Java 类型系统中处理数值数据的重要组成部分。此外,它还提供诸如 Long.MAX_VALUE
和 Long.MIN_VALUE
等常量,用于表示 long 的最大值和最小值。
作为 不可变类,Long
确保其值在创建后无法修改,使其可以安全地用于并发应用程序。它扩展了 Number
类,允许与数值运算无缝集成,并实现了 Comparable
接口,从而可以在 TreeSet
和 PriorityQueue
等集合中进行 排序和比较。
Long 类方法
Long
类提供了几个用于有效处理 long 值的 静态和实例方法。这些方法包括:
- 解析 & 转换:
parseLong(String s)
,valueOf(long l)
, 以及toString()
用于在不同表示形式之间进行转换。 - 比较方法:
compare(long x, long y)
和compareTo(Long other)
用于排序和逻辑比较。 - 位操作:
bitCount(long x)
,highestOneBit(long x)
, 和numberOfTrailingZeros(long x)
用于高效的二进制运算。
这些方法使 Long
成为处理大数字、优化存储以及在 Java 应用程序中 高效执行数学运算 的强大工具。
创建 Long 对象
可以使用静态工厂方法或自动装箱创建 Long
对象。 建议使用 valueOf
方法,因为它们可能会返回缓存的对象以获得更好的性能。
package com.zetcode; public class Main { public static void main(String[] args) { Long num1 = Long.valueOf(987654321L); // Parsing from String Long num2 = Long.valueOf("123456789012345"); // Using autoboxing Long num3 = 98765432109876L; System.out.println("num1: " + num1); System.out.println("num2: " + num2); System.out.println("num3: " + num3); } }
此示例演示了创建 Long
对象的推荐方法。 建议使用 valueOf
方法,因为它们可能会使用缓存的实例以获得更好的性能。 自动装箱会自动将原始 long
类型转换为 Long
对象。
将字符串解析为 Long
Long
类提供了几种将字符串转换为 long
值的方法。 parseLong
方法将字符串转换为原始 long
类型,而 valueOf
返回一个 Long
对象。 两者都可以处理不同的基数(数字进制)。
package com.zetcode; public class Main { public static void main(String[] args) { // Parse decimal string long decimal = Long.parseLong("123456789"); System.out.println("Decimal: " + decimal); // Parse hexadecimal string long hex = Long.parseLong("1A3F", 16); System.out.println("Hex 1A3F: " + hex); // Parse binary string long binary = Long.parseLong("101010", 2); System.out.println("Binary 101010: " + binary); // Using valueOf which returns Long object Long octal = Long.valueOf("777", 8); System.out.println("Octal 777: " + octal); try { Long invalid = Long.parseLong("123ABC"); } catch (NumberFormatException e) { System.out.println("Error parsing: " + e.getMessage()); } } }
此示例展示了如何使用不同的数字进制将字符串解析为 long
值。 parseLong
方法会为无效输入抛出 NumberFormatException
异常。 基数参数 (2-36) 指定转换的数字进制。
将 Long 转换为字符串
Long
提供了多种方法,用于将 long
值转换为各种格式的字符串。 这些包括标准十进制字符串,以及二进制、八进制和十六进制表示形式。 toString
方法是最常用的方法。
package com.zetcode; public class Main { public static void main(String[] args) { long number = 255L; // Standard decimal string String decimalStr = Long.toString(number); System.out.println("Decimal: " + decimalStr); // Binary string String binaryStr = Long.toBinaryString(number); System.out.println("Binary: " + binaryStr); // Hexadecimal string String hexStr = Long.toHexString(number); System.out.println("Hex: " + hexStr); // Octal string String octalStr = Long.toOctalString(number); System.out.println("Octal: " + octalStr); // String with specified radix String base5Str = Long.toString(number, 5); System.out.println("Base 5: " + base5Str); } }
此示例演示了 Long
类中可用的各种字符串转换方法。 每种方法都会生成数字在指定基数中的字符串表示形式。 toString
方法可以处理 2 到 36 之间的任何基数。
比较 Long 值
Long
类提供了几种比较 long
值的方法。 compare
和 compareTo
方法执行数值比较,而 equals
检查对象是否相等。 还有一些用于无符号比较的方法。
package com.zetcode; public class Main { public static void main(String[] args) { Long a = 100L; Long b = 200L; Long c = 100L; // Using compareTo System.out.println("a.compareTo(b): " + a.compareTo(b)); System.out.println("a.compareTo(c): " + a.compareTo(c)); // Using static compare System.out.println("Long.compare(a, b): " + Long.compare(a, b)); // Using equals System.out.println("a.equals(b): " + a.equals(b)); System.out.println("a.equals(c): " + a.equals(c)); // Unsigned comparison long x = -1L; long y = 1L; System.out.println("Unsigned compare: " + Long.compareUnsigned(x, y)); } }
此示例展示了 Long
值的不同比较技术。 compareTo
和 compare
方法返回负数、零或正数,指示数字之间的关系。 compareUnsigned
方法将值视为无符号数进行比较。
位操作方法
Long
类包含几个用于对 long
值进行位级操作的静态方法。 这些方法包括计算位数、反转位、旋转位和查找最高/最低设置位。 它们对于底层编程很有用。
package com.zetcode; public class Main { public static void main(String[] args) { long num = 0b10101010101010101010101010101010L; System.out.println("Number: " + Long.toBinaryString(num)); System.out.println("Bit count: " + Long.bitCount(num)); System.out.println("Highest one bit: " + Long.toBinaryString(Long.highestOneBit(num))); System.out.println("Lowest one bit: " + Long.toBinaryString(Long.lowestOneBit(num))); System.out.println("Number of leading zeros: " + Long.numberOfLeadingZeros(num)); System.out.println("Number of trailing zeros: " + Long.numberOfTrailingZeros(num)); System.out.println("Reversed bits: " + Long.toBinaryString(Long.reverse(num))); System.out.println("Rotated left by 4: " + Long.toBinaryString(Long.rotateLeft(num, 4))); } }
此示例演示了各种位操作方法。 bitCount
方法计算设置位数,highestOneBit
查找最左边的设置位,reverse
翻转所有位。 这些操作在 long
值的二进制级别执行。
Long 常量和大小方法
Long
类定义了几个与 long
类型的大小和限制相关的有用常量和方法。 这些包括 MIN_VALUE
、MAX_VALUE
、SIZE
和 BYTES
,它们提供了有关 long
数据类型特征的信息。
package com.zetcode; public class Main { public static void main(String[] args) { System.out.println("Long min value: " + Long.MIN_VALUE); System.out.println("Long max value: " + Long.MAX_VALUE); System.out.println("Size in bits: " + Long.SIZE); System.out.println("Size in bytes: " + Long.BYTES); long num = 1234567890123456789L; System.out.println("Signum of " + num + ": " + Long.signum(num)); System.out.println("Signum of -" + num + ": " + Long.signum(-num)); System.out.println("Signum of 0: " + Long.signum(0)); System.out.println("Hash code of " + num + ": " + Long.hashCode(num)); } }
此示例显示了 Long
类常量和实用方法的使用。 MIN_VALUE
和 MAX_VALUE
常量定义了有效 long
值的范围。 signum
方法返回 -1、0 或 1,指示数字的符号。 hashCode
方法返回 long
值的哈希码。
来源
在本文中,我们通过实际示例介绍了 Java Long
类的基本方法。 Long
类为处理 long
值提供了强大的功能,包括解析、转换、比较和位运算。
作者
列出所有Java教程。