ZetCode

Java Long 类

最后修改时间:2025 年 4 月 13 日

java.lang.Long 类是原始类型 long 的包装类。它为 转换、比较和操作 long 值提供了广泛的实用方法,使其成为 Java 类型系统中处理数值数据的重要组成部分。此外,它还提供诸如 Long.MAX_VALUELong.MIN_VALUE 等常量,用于表示 long 的最大值和最小值。

作为 不可变类Long 确保其值在创建后无法修改,使其可以安全地用于并发应用程序。它扩展了 Number 类,允许与数值运算无缝集成,并实现了 Comparable 接口,从而可以在 TreeSetPriorityQueue 等集合中进行 排序和比较

Long 类方法

Long 类提供了几个用于有效处理 long 值的 静态和实例方法。这些方法包括:

这些方法使 Long 成为处理大数字、优化存储以及在 Java 应用程序中 高效执行数学运算 的强大工具。

创建 Long 对象

可以使用静态工厂方法或自动装箱创建 Long 对象。 建议使用 valueOf 方法,因为它们可能会返回缓存的对象以获得更好的性能。

Main.java
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 对象。 两者都可以处理不同的基数(数字进制)。

Main.java
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 方法是最常用的方法。

Main.java
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 值的方法。 comparecompareTo 方法执行数值比较,而 equals 检查对象是否相等。 还有一些用于无符号比较的方法。

Main.java
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 值的不同比较技术。 compareTocompare 方法返回负数、零或正数,指示数字之间的关系。 compareUnsigned 方法将值视为无符号数进行比较。

位操作方法

Long 类包含几个用于对 long 值进行位级操作的静态方法。 这些方法包括计算位数、反转位、旋转位和查找最高/最低设置位。 它们对于底层编程很有用。

Main.java
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_VALUEMAX_VALUESIZEBYTES,它们提供了有关 long 数据类型特征的信息。

Main.java
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_VALUEMAX_VALUE 常量定义了有效 long 值的范围。 signum 方法返回 -1、0 或 1,指示数字的符号。 hashCode 方法返回 long 值的哈希码。

来源

Java Long 类文档

在本文中,我们通过实际示例介绍了 Java Long 类的基本方法。 Long 类为处理 long 值提供了强大的功能,包括解析、转换、比较和位运算。

作者

我叫 Jan Bodnar,是一名专注的程序员,在该领域拥有多年的经验。 我于 2007 年开始撰写编程文章,此后撰写了 1,400 多篇文章和八本电子书。 凭借超过八年的教学经验,我致力于分享我的知识并帮助他人掌握编程概念。

列出所有Java教程