社区
Java SE
帖子详情
valueOf和空指针异常问题
bolziman123
2010-06-03 08:32:49
valueOf的源码是
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
可是为什么
if(String.valueOf(null).equals("null") ){
System.out.println("ss");
}
报空指针异常?
...全文
564
23
打赏
收藏
valueOf和空指针异常问题
valueOf的源码是 public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 可是为什么 if(String.valueOf(null).equals("null") ){ System.out.println("ss"); } 报空指针异常?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2010-06-04
打赏
举报
回复
JDK的String类源码
bolziman123
2010-06-04
打赏
举报
回复
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
这段代码是从哪来的?
xiaoshihenmei
2010-06-04
打赏
举报
回复
null.equals()肯定会报错啊
uqortbsa
2010-06-04
打赏
举报
回复
函数重载的问题!!!!
null在Java里是一个“神奇”的对象,既不是任何对象,又可以被强转为任何对象
Java编译器在处理函数调用时,会使用尽量精确的函数定义
查看String.valueOf函数
发现有个N个.排除基本类型为参数的及参数个数不一致的同名函数
只留下2个函数
String.valueOf(Object o)
String.valueOf(char[] data)
显然后者比前者更精确。因此编译器认为String.valueOf(null)调用的是后者.
而后者又调用 new String(char[])
so 空指针了
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
zhuyouyong
2010-06-04
打赏
举报
回复
顶[Quote=引用 1 楼 gesanri 的回复:]
Java code
public class Test{
public static void main(String args[]){
Object o = null;
if(String.valueOf(o).equals("null") ){
System.out.println("ss");
……
[/Quote]
bolziman123
2010-06-04
打赏
举报
回复
我的jdk api 1.60没看到有源码可以看啊?
「已注销」
2010-06-03
打赏
举报
回复
如1楼提到的代码
如果你是对一个变量调用其String.valueOf函数,则编译器取其字面类型。
除了被声明为char[]类型的null外,其它类型的null,其valueOf都返回"null"
「已注销」
2010-06-03
打赏
举报
回复
null在Java里是一个“神奇”的对象,既不是任何对象,又可以被强转为任何对象
Java编译器在处理函数调用时,会使用尽量精确的函数定义
查看String.valueOf函数
发现有个N个.排除基本类型为参数的及参数个数不一致的同名函数
只留下2个函数
String.valueOf(Object o)
String.valueOf(char[] data)
显然后者比前者更精确。因此编译器认为String.valueOf(null)调用的是后者.
而后者又调用 new String(char[])
so 空指针了
dracularking
2010-06-03
打赏
举报
回复
[Quote=引用 14 楼 bolziman123 的回复:]
如果没用到那个方法的话,那么valueOf的对参数的处理是怎样的?
[/Quote]
三楼提到过~
public static String valueOf(char data[]) {
return new String(data);
}
|
V
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
value为空导致异常
bolziman123
2010-06-03
打赏
举报
回复
如果没用到那个方法的话,那么valueOf的对参数的处理是怎样的?
dracularking
2010-06-03
打赏
举报
回复
[Quote=引用 11 楼 bolziman123 的回复:]
原生方法的概念不大清楚
[/Quote]
就是根本没用到你这个方法
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
gjanyanlig
2010-06-03
打赏
举报
回复
这里应该是java.lang.String,此异常貌似和public static String valueOf(Object obj)是静态方法有关,大家怎么看呢?
bolziman123
2010-06-03
打赏
举报
回复
原生方法的概念不大清楚
dracularking
2010-06-03
打赏
举报
回复
你说valueOf的源码,这里用的String.valueOf还是java.lang.String的原生方法吧?
原生方法必然空指针
bolziman123
2010-06-03
打赏
举报
回复
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
24K純帥
2010-06-03
打赏
举报
回复
额( ⊙ o ⊙ )!
水中影子
2010-06-03
打赏
举报
回复
顶楼上!
gjanyanlig
2010-06-03
打赏
举报
回复
[Quote=引用 2 楼 lyqiang00 的回复:]
String.valueOf(null) = null,既然是null,那还能.equals()吗?
[/Quote]
同意,.equals()是比较是否具有相同的引用,既然是null了,根本就没任何引用,肯定报异常
危险的大猫
2010-06-03
打赏
举报
回复
[Quote=引用 2 楼 lyqiang00 的回复:]
String.valueOf(null) = null,既然是null,那还能.equals()吗?
[/Quote]
源码中很清楚说了,返回String类 "null"
bolziman123
2010-06-03
打赏
举报
回复
和四楼的想法一样,理解不了
加载更多回复(3)
关于Integer.
value
Of(param)报空指针
本文探讨了一种在Java中使用Integer.
value
Of()方法时遇到的
空指针异常
问题
,并通过详细的代码示例解释了异常产生的原因。作者通过一系列实验发现了
问题
的根源在于自动拆箱过程中的空值处理。
如何防止
空指针异常
本文探讨了Java中处理
空指针异常
和类型转换的方法。通过一个实例,展示了如何使用String.
value
Of()和Integer.
value
Of()进行对象到字符串及整数的转换,并讨论了当输入为null或空字符串时可能引发的
问题
。
Java源码之String.
value
Of(null)(基于JDK1.8)
本文探讨了在Java中使用String.
value
Of(null)时遇到的
空指针异常
问题
,解析了其内部实现机制,并提供了安全的代码实践建议。
类型转换的那些事儿——浅谈.
value
Of()与parseDouble() and so on
本文通过实例解析了Java中使用String.
value
Of()与Double.
value
Of()等方法进行类型转换时可能遇到的
问题
,特别是当处理null值时易引发
空指针异常
的情况。
既然java强转会有
空指针异常
,为啥idea不提示让我用 String.
value
Of 包起来,而是提示我用 (String) 强转。
本文深入分析Java中类型强制转换与String.
value
Of的区别,指出强转不会引发
空指针异常
,真正
问题
是null对象调用方法所致。两者语义不同,IDEA出于合法性、等价性和开发者自主原则不推荐自动替换。
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章