提问人:abc123 提问时间:11/24/2021 最后编辑:Abraabc123 更新时间:11/24/2021 访问量:69
为什么我可以将字符串连接到空字符串,但不能将字符连接到空字符?
Why am I able to concatenate a String to a null String but not a Character to a null Character?
问:
我在这里感到困惑。 我有 String,我已为其分配 null。因此,当我连接一个 String anotherString=“abc” 时,它会打印“nullabc”。 但是,如果我尝试对 Character 执行相同的操作,如代码中所示,我会得到一个空指针。我想知道为什么会发生这种情况。 我是 Java 的新手,想了解该语言的细微差别。任何帮助都表示赞赏。谢谢!
String nullString=null;
Character nullCharacter=null;
Character character=new Character('k');
Integer nullInteger=null;
System.out.println(nullString+"abcdefgh");//prints-"nullabcdefgh"
System.out.println(nullCharacter+character);// throws null pointer exception
答:
1赞
Abra
11/24/2021
#1
Java 使用自动装箱(实际上,在本例中为取消装箱)将对象转换为基元,并且由于为 null,因此失败。Character
char
nullCharacter
自动装箱仅影响包装基元的类,因此它不适用于 。String
如果将 not-null(在代码中命名)转换为 ,则不会得到 .Character
character
String
NullPointerException
System.out.println(character.toString() + nullCharacter);
2赞
GeertPt
11/24/2021
#2
Character 类是基元类型的包装类,基元类型是一个 16 位数字。char
如果将两个原始 char 变量相加,则只需将数值相加。
char a = 'a';
char b = 'b';
char c = (char)(a+b); // c == 'Ã'
使用 Character 包装器对象的语法只有在自动拆箱(在 Java 1.5 中引入)才能实现。它会隐式地将其转换为数字加法:nullCharacter+character
nullCharacter.charValue() + character.charValue() // throws NPE
另一方面,将两个字符串相加是在 Java 开始时引入的 String 连接操作,该操作以不同的方式处理 null 值。从理论上讲,它是特定于编译器的,但大多数编译器是这样实现的:nullString+"abcdefgh"
new StringBuilder()
.append(nullString) // implicitly converts null to "null"
.append("abcdefgh")
.toString()
评论
0赞
Andy Turner
11/24/2021
"char c = a+b;
“你需要一个石膏。另外,它是 ,不是 .charValue()
toCharValue()
0赞
abc123
11/24/2021
明白了,不知道里面有自动开箱!
评论