是否存在以下行为的逻辑语言设计类型的解释(Java 7和我怀疑较早的版本):
Object a = null;
String as = String.valueOf(a); // as is assigned "null"
System.out.println(as+":"+as.length()); // prints: "null:4"
System.out.println ( String.valueOf(null)); // NPE
在statement中System.out.println(String.valueOf(null));
有一个method的调用public static String valueOf(char data[])
,其源代码如下:
public static String valueOf(char data[]) {
return new String(data);
}
那就是为什么你得到 NPE
另一方面,在statement中Object a = null; String as = String.valueOf(a);
有一个method的调用public static String valueOf(Object obj)
,其源代码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这就是为什么您得到 “空” 而不是 NPE的原因
Java语言规范中的一些理论问题:15.12.2.5选择最具体的方法
如果多个成员方法既可访问又可应用于方法调用,则必须选择一个成员方法来为运行时方法分派提供描述符。 Java编程语言使用选择 最具体 方法的规则。
A char[]
是类型Object
,但不是全部Object
都是类型char[]
。型char[]
是 更具体的
比对象和作为Java语言规范所描述的,String.valueOf(char[])
过载被选择在这种情况下。
编辑
还值得一提的是伊恩·罗伯茨([IanRoberts提到的内容(在下面的评论中):
这是需要注意的重要的是它的,如果没有一个统一的超载比所有其他更具体的编译错误-
如果有一个valueOf(String)
方法,以及valueOf(Object)
和
valueOf(char[])
随后的非类型化的调用String.valueOf(null)
是不明确
我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null
我使用Ehcache 2.6.8作为Spring Boot应用程序的一部分,作为Hibernate 4.3.11的二级缓存。我有一个JMX MBean,它允许我检查缓存的内容(如果您感兴趣,可以在这里查看)。 首先,我使用CacheManager名称来获取缓存列表。这很好。我可以用返回缓存。然后我调用。这很好,cacheName是“com.myapp.DomainObjectName”,键被列为“
加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur
我试图打开一个文件进行解析(一个二进制文件),但是无论什么fopen()总是返回NULL。 我已经排除了几乎所有的东西,我有一个简单的测试脚本: trigger_error(var_export())的输出;是: 无论我为第二个fopen()选项指定什么标志,我都会得到相同的结果。 现在,明显的问题是该文件是否存在,以及我是否拥有读取该文件的权限?这两个问题的答案都是肯定的。我使用了相对路径和绝对
在fetchplaces方法中,新的window.google.maps.places.PlacesService(map)总是返回null,并且Service.NearbySearch不会引发函数错误。 请帮忙。
DatePicker在更改日期之后没有更新。 另外,我尝试了在没有侦听器的情况下获取数据,比如: 也许有人有类似的问题,并找到了解决办法? 编辑1: