创建Long对象 valueOf
Long类的valueOf方法是一种创建Long对象的便捷方式。
与直接使用构造方法Long(long)相比,valueOf方法在处理常见数值时更优,因为它可能会通过内部缓存来重用已有的对象,从而提高性能。
✍方法声明
public static Long valueOf(long i);
- 📥入参:i为一个long值。
- 🪐返回值:表示i的Long实例。
public static void main(String[] args) {
Long num1 = Long.valueOf(12345);
Long num2 = Long.valueOf(-12345);
}
✍方法声明
public static Long valueOf(String s) throws NumberFormatException;
- 📥入参:s为要解析的字符串。
- 🪐返回值:包含由字符串参数表示的值的Long对象。
- 🐛抛出异常NumberFormatException:如果字符串不能解析为一个long。
返回保持指定String的值的Long对象。该参数被解释为表示一个有符号的十进制long,该值与用该参数作为参数的parseLong(java.lang.String)方法得到的值非常相似。结果是表示由字符串指定的整数值的Long对象。
换句话说,此方法返回一个Long对象,它的值等于new Long(Long.parseLong(s))。
public static void main(String[] args) {
Long num1 = Long.valueOf("1234567");
System.out.println(num1);
Long num2 = Long.valueOf("-12345");
System.out.println(num2);
Long aLong = Long.valueOf("10240124M");
}
-12345
java.lang.NumberFormatException: For input string: “10240124M”
在 Long 内部,维护了一个 LongCache,如果创建的 Long 对象在 cache 范围内,则会重用该对象。
public static void main(String[] args) {
Long num1 = Long.valueOf("12");
Long num2 = Long.valueOf(12);
System.out.println(num1.equals(num2));
System.out.println(num1 == num2);
}
重用对象的一种表现形式就是 ==
结果为真。
true
通常,LongCache会缓存-128到127之间的Long对象。超过 LongCache 范围后,会创建新对象。
public static void main(String[] args) {
Long num1 = Long.valueOf("129");
Long num2 = Long.valueOf(129);
System.out.println(num1.equals(num2));
System.out.println(num1 == num2);
}
创建新对象以后,尽管 eqauls
返回为 true, ==
结果却为 false。
false
✍方法声明
返回从指定的String中提取的值的Long对象,并通过第二个参数指定基数。
public static Long valueOf(String s,int radix) throws NumberFormatException;
- 📥入参:S:要解析的字符串。radix:解释s时使用的基数。
- 🪐返回值:保持由指定基数中的字符串参数表示的值的Long对象。
- 🐛抛出异常NumberFormatException:如果字符串不能解析为一个整数。
该方法将第一个参数解释为有符号的long,基数由第二个参数指定,该值与用该参数作为参数的parseLong(java.lang.String,int)
方法得到的值非常类似。
结果是表示字符串指定的long值的Long对象。
换句话说,此方法返回一个Long对象,它的值等于:new Long(Long.parseLong(s,radix))
。
public static void main(String[] args) {
Long num1 = Long.valueOf("123AF", 16);
System.out.println(num1);
Long num2 = Long.valueOf("-110", 2);
System.out.println(num2);
Long num3 = Long.valueOf("89", 8);
}
-6
java.lang.NumberFormatException: For input string: “89”
📝总结
Long类的valueOf方法提供了一种高效的创建Long对象的方式,尤其是在处理常见数值时。
通过内部缓存机制,valueOf(long i)方法可以重用已有的对象,减少内存消耗。valueOf(String s)和valueOf(String s, int radix)方法则允许从字符串表示创建Long对象,其中后者支持自定义基数的解析。
在使用这些方法时,应注意处理可能的NumberFormatException异常,并确保提供有效的数值字符串。开发者应该根据实际情况选择合适的方法来创建Long对象,以优化性能和代码可读性。