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教程。