当前位置: 首页 > 面试题库 >

为什么String用+运算符连接null并用concate()方法抛出NullPointerException

郤立果
2023-03-14
问题内容

这是我的课,我在这里连接两个字符串。null使用+运算符连接的字符串可以平稳执行,但可以NullPointerException使用concate()方法抛出。

public class Test {

    public static void main(String[] args) {

        String str="abc";
        String strNull=null;

        System.out.println(strNull+str);

        str.concat(strNull);
    }
}

有人可以告诉我背后的原因吗?


问题答案:

情况1:

 System.out.println(strNull+str);  // will not give you exception

从文档(字符串转换)

如果引用为null,则将其转换为字符串“ null” (四个ASCII字符n,u,l,l)。

否则,将执行转换,就好像是通过调用不带参数的引用对象的toString方法一样;但是,如果调用toString方法的结果为null,则使用字符串“
null”代替。

情况2:

str.concat(strNull);  //NullPointer exception

如果您看到它的来源,concat(String str)那么str.length();就好比null.length()给您一个NullPointerException



 类似资料:
  • 问题内容: 根据文档,该方法返回: 如果参数是,则字符串等于; 否则,返回的值。 但是,当我尝试这样做时,怎么会这样: 它会抛出NPE吗?(如果你不相信,请自己尝试!) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗? 问题答案: 问题是方法已重载: String.valueOf(Object) String.valueOf(char[]) Java规范语言要求在这种情况下,选择最具体的重

  • 问题内容: 用Java连接两个String的最快方法是什么? 即 我在中使用它作为键,并且在一个非常紧密的循环中调用它来检索值。 当我分析时,这就是瓶颈 问题答案: 这些例程出现在基准测试中的原因是因为这是编译器在幕后实施“ +”的方式。 如果您确实需要连接的字符串,则应让编译器以“ +”号表示神奇。如果你都需要对地图查找一个键,一键类控股与合适的两个字符串,并因为它避免了复制步骤的实现可能是一个

  • 我有一段类似这样的代码: 我的测试是: 上面的代码不应该抛出NPE吗? 当我将测试更改为: 然后我的代码正确地抛出了一个空指针异常。 我的测试第一版和第二版有什么区别? 在我的第一个版本中,我告诉mockA返回mockB。但是我也将mockB设置为null,所以当调用b.doSomething()时,我认为该方法应该抛出一个空指针,因为它试图调用null.doSomething()。 我知道我应该

  • 问题内容: 这段代码有什么问题: 问题答案: 三元运算符不能有不返回值或方法的语句。您需要具有返回值的语句。 您需要重写它。

  • 我创建了一个从HashMap中删除学生的方法。当id为NULL时,它会抛出一个异常。有人知道它为什么不起作用吗? 公共类应用程序{public static void main(String[]args){ }

  • 问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?