简介
在本次实验中,我们将探索不同的方法来判断 Java 中的一个数字是否为 Long
类型。首先,我们将学习如何使用 instanceof
运算符来检查一个对象是否为 Long
包装类的实例。
接着,我们将深入研究如何将字符串解析为 Long
类型的值,并了解在这个过程中如何处理可能出现的错误。最后,我们将区分 Long
和 Integer
类型,强调它们的主要区别以及如何有效地使用这两种类型。
在本次实验中,我们将探索不同的方法来判断 Java 中的一个数字是否为 Long
类型。首先,我们将学习如何使用 instanceof
运算符来检查一个对象是否为 Long
包装类的实例。
接着,我们将深入研究如何将字符串解析为 Long
类型的值,并了解在这个过程中如何处理可能出现的错误。最后,我们将区分 Long
和 Integer
类型,强调它们的主要区别以及如何有效地使用这两种类型。
在这一步中,我们将探索 Java 中的 Long
类,并学习如何检查一个对象是否为 Long
类的实例。
在 Java 中,像 long
这样的基本数据类型不是对象。不过,Java 为每个基本类型都提供了包装类,Long
就是 long
基本类型的包装类。包装类使我们能够将基本值当作对象来处理,这在很多场景下都很有用,比如在处理集合时。
要检查一个对象是否为某个特定类的实例,我们可以使用 instanceof
运算符。instanceof
运算符是一个二元运算符,用于测试一个对象是否为某个类、子类或接口的实例。
让我们创建一个简单的 Java 程序,来演示如何对 Long
类使用 instanceof
运算符。
如果 HelloJava.java
文件还未在 WebIDE 编辑器中打开,请打开它。
将文件的全部内容替换为以下代码:
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.");
}
}
}
在这段代码中:
myLong
的 Long
对象,其值为 12345L
。L
后缀表示这是一个 long
类型的字面量。myInteger
的 Integer
对象,其值为 67890
。instanceof
运算符来检查 myLong
是否为 Long
类的实例。instanceof
运算符来检查 myInteger
是否为 Long
类的实例。保存文件(Ctrl+S 或 Cmd+S)。
在终端中运行以下命令来编译程序:
javac HelloJava.java
如果编译成功,你将不会看到任何输出。
运行编译后的程序:
java HelloJava
你应该会看到以下输出:
myLong is an instance of Long.
myInteger is not an instance of Long.
这个输出证实了我们创建的 myLong
作为 Long
对象,确实是 Long
类的实例,而作为 Integer
对象创建的 myInteger
则不是。
在这一步中,我们将学习如何把数字的 String
表示形式转换为 Long
对象或 long
基本类型。当你以文本形式接收数值数据时,例如从用户输入或文件中获取,这是一项常见的任务。
Long
类提供了静态方法来执行这种转换。两个最常用的方法是:
Long.parseLong(String s)
:此方法将字符串参数解析为有符号的十进制 long
类型。它返回一个基本的 long
值。Long.valueOf(String s)
:此方法返回一个 Long
对象,该对象包含由字符串参数表示的值。让我们修改 HelloJava.java
程序,以演示如何将字符串解析为 long
和 Long
类型。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
将现有代码替换为以下内容:
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
中。保存文件(Ctrl+S 或 Cmd+S)。
编译程序:
javac HelloJava.java
确保没有编译错误。
运行程序:
java HelloJava
你应该会看到类似以下的输出:
Parsed primitive long: 9876543210
Parsed Long object: 9876543210
Parsed another primitive long: 112233445566
这个输出表明,Long.parseLong()
和 Long.valueOf()
都成功地将数字的字符串表示形式转换为了相应的 long
和 Long
值。
需要注意的是,如果字符串不包含可以表示为 long
类型的有效数字,这些方法将抛出 NumberFormatException
异常。在这个基础实验中,我们不会涉及错误处理,但在实际应用中,这是需要牢记的一点。
在这一步中,我们将着重了解 Java 中 long
(及其包装类 Long
)和 int
(及其包装类 Integer
)之间的关键区别。虽然两者都用于存储整数,但它们在所能存储的值的范围和内存使用方面存在显著差异。
主要区别在于它们的大小:
int
:int
是一个 32 位的有符号二进制补码整数。这意味着它可以存储从 -2,147,483,648 到 2,147,483,647 的值。long
:long
是一个 64 位的有符号二进制补码整数。这使得它能够存储更大范围的值,从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。让我们修改 HelloJava.java
程序来演示这种差异。
在 WebIDE 编辑器中打开 HelloJava.java
文件。
将现有代码替换为以下内容:
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.SIZE
和 Long.SIZE
打印出 int
和 long
的位数大小。保存文件(Ctrl+S 或 Cmd+S)。
编译程序:
javac HelloJava.java
确保没有编译错误。
运行程序:
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
来区分 Long
和 Integer
对象。