如何在 Java 中检查一个数字是否为 Long 类型

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,我们将探索不同的方法来判断 Java 中的一个数字是否为 Long 类型。首先,我们将学习如何使用 instanceof 运算符来检查一个对象是否为 Long 包装类的实例。

接着,我们将深入研究如何将字符串解析为 Long 类型的值,并了解在这个过程中如何处理可能出现的错误。最后,我们将区分 LongInteger 类型,强调它们的主要区别以及如何有效地使用这两种类型。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/StringManipulationGroup -.-> java/strings("Strings") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/data_types -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/if_else -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/type_casting -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/strings -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/classes_objects -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/wrapper_classes -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} java/object_methods -.-> lab-559957{{"如何在 Java 中检查一个数字是否为 Long 类型"}} end

检查是否为 Long 类的实例

在这一步中,我们将探索 Java 中的 Long 类,并学习如何检查一个对象是否为 Long 类的实例。

在 Java 中,像 long 这样的基本数据类型不是对象。不过,Java 为每个基本类型都提供了包装类,Long 就是 long 基本类型的包装类。包装类使我们能够将基本值当作对象来处理,这在很多场景下都很有用,比如在处理集合时。

要检查一个对象是否为某个特定类的实例,我们可以使用 instanceof 运算符。instanceof 运算符是一个二元运算符,用于测试一个对象是否为某个类、子类或接口的实例。

让我们创建一个简单的 Java 程序,来演示如何对 Long 类使用 instanceof 运算符。

  1. 如果 HelloJava.java 文件还未在 WebIDE 编辑器中打开,请打开它。

  2. 将文件的全部内容替换为以下代码:

    public class HelloJava {
        public static void main(String[] args) {
            // Create a Long object
            Long myLong = 12345L;
    
            // Create an Integer object
            Integer myInteger = 67890;
    
            // Check if myLong is an instance of Long
            if (myLong instanceof Long) {
                System.out.println("myLong is an instance of Long.");
            } else {
                System.out.println("myLong is not an instance of Long.");
            }
    
            // Check if myInteger is an instance of Long
            if (myInteger instanceof Long) {
                System.out.println("myInteger is an instance of Long.");
            } else {
                System.out.println("myInteger is not an instance of Long.");
            }
        }
    }

    在这段代码中:

    • 我们创建了一个名为 myLongLong 对象,其值为 12345LL 后缀表示这是一个 long 类型的字面量。
    • 我们创建了一个名为 myIntegerInteger 对象,其值为 67890
    • 我们使用 instanceof 运算符来检查 myLong 是否为 Long 类的实例。
    • 我们使用 instanceof 运算符来检查 myInteger 是否为 Long 类的实例。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 在终端中运行以下命令来编译程序:

    javac HelloJava.java

    如果编译成功,你将不会看到任何输出。

  5. 运行编译后的程序:

    java HelloJava

    你应该会看到以下输出:

    myLong is an instance of Long.
    myInteger is not an instance of Long.

这个输出证实了我们创建的 myLong 作为 Long 对象,确实是 Long 类的实例,而作为 Integer 对象创建的 myInteger 则不是。

将字符串解析为 Long 类型

在这一步中,我们将学习如何把数字的 String 表示形式转换为 Long 对象或 long 基本类型。当你以文本形式接收数值数据时,例如从用户输入或文件中获取,这是一项常见的任务。

Long 类提供了静态方法来执行这种转换。两个最常用的方法是:

  • Long.parseLong(String s):此方法将字符串参数解析为有符号的十进制 long 类型。它返回一个基本的 long 值。
  • Long.valueOf(String s):此方法返回一个 Long 对象,该对象包含由字符串参数表示的值。

让我们修改 HelloJava.java 程序,以演示如何将字符串解析为 longLong 类型。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 将现有代码替换为以下内容:

    public class HelloJava {
        public static void main(String[] args) {
            String numberString = "9876543210";
    
            // Parse the string to a primitive long
            long primitiveLong = Long.parseLong(numberString);
            System.out.println("Parsed primitive long: " + primitiveLong);
    
            // Parse the string to a Long object
            Long longObject = Long.valueOf(numberString);
            System.out.println("Parsed Long object: " + longObject);
    
            // Demonstrate parsing a different string
            String anotherNumberString = "112233445566";
            long anotherPrimitiveLong = Long.parseLong(anotherNumberString);
            System.out.println("Parsed another primitive long: " + anotherPrimitiveLong);
        }
    }

    在这段代码中:

    • 我们定义了一个 String 变量 numberString,其内容为文本 "9876543210"。
    • 我们使用 Long.parseLong() 方法将 numberString 转换为基本的 long 类型,并将结果存储在 primitiveLong 中。
    • 我们使用 Long.valueOf() 方法将 numberString 转换为 Long 对象,并将结果存储在 longObject 中。
    • 我们演示了对另一个字符串的解析,以展示该方法的灵活性。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 编译程序:

    javac HelloJava.java

    确保没有编译错误。

  5. 运行程序:

    java HelloJava

    你应该会看到类似以下的输出:

    Parsed primitive long: 9876543210
    Parsed Long object: 9876543210
    Parsed another primitive long: 112233445566

这个输出表明,Long.parseLong()Long.valueOf() 都成功地将数字的字符串表示形式转换为了相应的 longLong 值。

需要注意的是,如果字符串不包含可以表示为 long 类型的有效数字,这些方法将抛出 NumberFormatException 异常。在这个基础实验中,我们不会涉及错误处理,但在实际应用中,这是需要牢记的一点。

区分 Long 与 Integer

在这一步中,我们将着重了解 Java 中 long(及其包装类 Long)和 int(及其包装类 Integer)之间的关键区别。虽然两者都用于存储整数,但它们在所能存储的值的范围和内存使用方面存在显著差异。

主要区别在于它们的大小:

  • intint 是一个 32 位的有符号二进制补码整数。这意味着它可以存储从 -2,147,483,648 到 2,147,483,647 的值。
  • longlong 是一个 64 位的有符号二进制补码整数。这使得它能够存储更大范围的值,从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

让我们修改 HelloJava.java 程序来演示这种差异。

  1. 在 WebIDE 编辑器中打开 HelloJava.java 文件。

  2. 将现有代码替换为以下内容:

    public class HelloJava {
        public static void main(String[] args) {
            // Maximum value for int
            int maxInt = Integer.MAX_VALUE;
            System.out.println("Maximum value of int: " + maxInt);
    
            // Trying to store a value larger than maxInt in an int (will cause error if uncommented)
            // int tooBigInt = 2147483648; // This line would cause a compilation error
    
            // A value larger than maxInt, stored in a long
            long largeLong = 2147483648L; // Note the 'L' suffix
            System.out.println("A large value stored in long: " + largeLong);
    
            // Maximum value for long
            long maxLong = Long.MAX_VALUE;
            System.out.println("Maximum value of long: " + maxLong);
    
            // Demonstrating the size difference with literals
            System.out.println("Size of int in bits: " + Integer.SIZE);
            System.out.println("Size of long in bits: " + Long.SIZE);
        }
    }

    在这段代码中:

    • 我们使用 Integer.MAX_VALUE 打印出 int 所能存储的最大值。
    • 我们展示了一行被注释掉的代码,如果取消注释,这行代码会导致编译错误,因为值 2147483648 大于 int 的最大值。
    • 我们将相同的大值存储在 long 变量 largeLong 中,并使用 L 后缀来表示这是一个 long 类型的字面量。
    • 我们使用 Long.MAX_VALUE 打印出 long 所能存储的最大值。
    • 我们使用 Integer.SIZELong.SIZE 打印出 intlong 的位数大小。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 编译程序:

    javac HelloJava.java

    确保没有编译错误。

  5. 运行程序:

    java HelloJava

    你应该会看到类似以下的输出:

    Maximum value of int: 2147483647
    A large value stored in long: 2147483648
    Maximum value of long: 9223372036854775807
    Size of int in bits: 32
    Size of long in bits: 64

这个输出清楚地表明,long 能够存储比 int 大得多的值,并证实了它们各自的位数大小。在选择使用 int 还是 long 时,要考虑你的变量需要存储的值的范围。对于较小的数字,使用 int 以节省内存;对于较大的数字,则使用 long

总结

在这个实验中,我们学习了如何在 Java 中检查一个数字是否为 Long 类型。我们探究了 Long 包装类及其与基本 long 类型的关系。我们特别关注使用 instanceof 运算符来判断一个对象是否为 Long 类的实例。通过一个实际示例,我们演示了如何运用 instanceof 来区分 LongInteger 对象。