Java技术疑问:如何选择将字符串转为byte、short、int或long类型?
如何选择合适的整数类型valueOf方法(byte/short/int/long)
核心原则很简单:看字符串表示的数值落在哪个整数类型的取值范围内,就用对应类型的valueOf()方法。不同整数类型的取值范围是固定的,先明确这些范围,再结合业务场景判断即可。
各整数类型的取值范围
- byte:最小值
-128,最大值127(包含两端) - short:最小值
-32768,最大值32767(包含两端) - int:最小值
-2147483648(即-2^31),最大值2147483647(即2^31-1)(包含两端) - long:最小值
-9223372036854775808(即-2^63),最大值9223372036854775807(即2^63-1)(包含两端)
具体判断步骤
- 先确认数值合法性:确保字符串是有效的整数格式(无非法字符、正负符号正确),否则调用
valueOf()会抛出NumberFormatException。 - 转成大范围类型判断:先把字符串转成
long类型(因为它的范围最大,不会溢出),再对比这个数值落在哪个类型的区间里。 - 结合业务场景选择:如果业务场景明确数值范围(比如用户年龄、状态码),直接用对应小范围类型;如果数值可能超出
int范围(比如大额金额、时间戳),直接用long。
场景示例
- 示例1:字符串是
"89"
这个数值同时在byte、short、int、long范围内,选择哪种取决于后续业务:如果要存在byte类型变量里,用Byte.valueOf("89");普通整数运算用Integer.valueOf("89")足够;如果是为了兼容更大数值的扩展场景,用Long.valueOf("89")也可以,但没必要,小范围类型更节省内存。 - 示例2:字符串是
"3000000000"(30亿)
这个数值超出了int的最大值(2147483647),必须用Long.valueOf("3000000000"),用Integer.valueOf()会直接抛出异常。
代码实现参考
String numStr = "1234567890"; long num; try { num = Long.parseLong(numStr); } catch (NumberFormatException e) { // 处理非法数值字符串的情况 e.printStackTrace(); return; } if (num >= Byte.MIN_VALUE && num <= Byte.MAX_VALUE) { Byte result = Byte.valueOf(numStr); // 执行byte类型相关逻辑 } else if (num >= Short.MIN_VALUE && num <= Short.MAX_VALUE) { Short result = Short.valueOf(numStr); // 执行short类型相关逻辑 } else if (num >= Integer.MIN_VALUE && num <= Integer.MAX_VALUE) { Integer result = Integer.valueOf(numStr); // 执行int类型相关逻辑 } else { Long result = Long.valueOf(numStr); // 执行long类型相关逻辑 }
注意事项
- 不要盲目使用
long:虽然它的范围最大,但小范围类型(byte/short/int)占用内存更少,运算效率也略高,在明确范围的场景下优先选择对应小类型。 - 异常处理:必须考虑字符串不是有效整数的情况,用
try-catch捕获NumberFormatException,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Radu Dumbrăveanu
相关产品推荐
相关产品推荐

