Java中Integer.toString(arg)方法可能会出现空指针异常的情况。

6

Integer.toString(args)会像String.valueOf(args)一样抛出NullPointerException吗?

我知道这个问题有点傻,但我想要弄清楚的是,Integer.toString()是否有可能会产生NullPointerException


1
是的,如果 argsnull - Elliott Frisch
1
@ElliottFrisch 不行,args 的类型是 int - Tunaki
1
@Tunaki 它可能是一个“整数”,而自动解包null会导致NPE。 - Elliott Frisch
你可能已经可以访问Java编译器了。考虑编写一个简短的测试来确定Integer.toString(null)是否会抛出NullPointerException异常。 - DwB
5个回答

5
"Integer.toString(args)" 可能会出现空指针异常,而 "String.valueOf(args)" 不会。"
Integer i = null; 
Integer.toString(i);        // Null pointer exception!! 
String.valueOf(i);          // No exception 
i.toString();               // Again, Null pointer exception!!

请看我的实验: http://rextester.com/YRGGY86170

3
从技术上讲,是的,由于拆箱。虽然我不确定这是否是您的意思:
public class Test {

    public static void main(String[] args) {
        Integer i = null;
        System.out.println(Integer.toString(i)); // NullPointerException
    }
}

1
从技术上讲,抛出异常的不是 toString - Sotirios Delimanolis
1
@SotiriosDelimanolis:OP问是否Integer.toString(args)会导致NPE。这正是我展示的内容。 - Marvin

2
答案是有和没有。这取决于如何解释你的问题。
在表达式var.toString()(或Integer.toString(var))中,是否可能抛出NullPointerException ?是的。 在方法Integer.toString()(或Integer.toString(int))中,是否会出现NullPointerException?不会。var.toString()中,如果var为空,则会抛出NullPointerException。但是异常将由当前方法抛出,并且将不调用toString()
Integer.toString(var)中,如果var为空,则会抛出NullPointerException。但它不是 toString(int) 方法引发的。如果var是一个整数对象,则该表达式是简写形式。
Integer.toString(var.intValue())

显然,如果var为空,则当前方法将抛出NullPointerException,并且既不会调用intValue()也不会调用toString(int)

因此,再次强调,toString()toString(int)本身永远不会抛出NullPointerException。


1
你是指类Integer的静态方法toString(int i)吗?该方法永远不会抛出NullPointerException——你无法传递任何int值,这些值会产生NullPointerException

@IgnacioChiazzo 你怎么知道的? - eis

0

Integer#toString不需要任何参数,只传递字段valuevalue永远不可能为null,因为您不能传递null int原始类型,而null String将仅抛出NumberFormatExceptionhere

编辑: 我没有考虑到带有int的toString方法,但结果将是相同的-int永远不可能为null,因此不会出现NPE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接