java - 为什么类型的空变量声明显示编译错误而不是空声明?

标签 java string compiler-errors variable-assignment

public static void main(String[] args) {
    String s1 = null;
    String s2;
    s1.trim(); //No compile error. But run time error
    s2.trim(); //compile error.
}

在上面的代码中,s1初始化后没有赋值 编译器知道 s1null。那为什么不像s2那样显示s1.trim()的编译错误呢?

最佳答案

因为s2没有初始化,而s1初始化为null

对于队列 1:您实际上是在 null 上执行 trim() 操作,因此它会抛出 NPE (NullPointerException) 应该是这样的。

对于问题 2: 参见 §4.12.5 JLS 的详细解释:

A local variable must be explicitly given a value before it is used, by either initialization or assignment, in a way that can be verified by the compiler using the rules for definite assignment.

关于java - 为什么类型的空变量声明显示编译错误而不是空声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18016950/

相关文章:

r - 从不规则间隔的 pdf 中提取字符串到整洁的 R 数据帧中

java - Dijkstra 算法模拟

java - 不断收到未声明的变量错误,我不明白从哪里来

Java EE Tomcat DefaultServlet 扩展不适用于静态文件

java - 模拟对象返回 null

java - 有关在 GORM 中保存的更多信息

.net - 如何在 C# 中使用枚举来存储字符串常量?

c# - 从没有正则表达式的字符串中获取一组数字

c++ - gluTessCallback 错误 C2440

java - 通过java程序从Linux服务器读取文件