社区
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");
}
报空指针异常?
...全文
574
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)报空指针
今天遇到了一个很奇葩的错误,大致现象如下:Integer unfinishedQty = Integer.
value
Of(obj.getTaskQty()) - 0;程序中有一行类似于这样的代码,报了个“
空指针异常
”,我还问了老同事,
value
Of不是不会报空指针么?同事说不会,就算报异常,也应该会报 java.lang.NumberFormatException,数字转换异常。可是,这一行确实报
如何防止
空指针异常
Object resCodeObj = null; ///返回接口response try { String s = String.
value
Of(resCodeObj); System.out.println(s); System.out.println(4444); if (!ObjectUtils.isEmpty(s)) { Integer resC...
Java源码之String.
value
Of(null)(基于JDK1.8)
前言 做毕设的时候发现String.
value
Of(null)
空指针异常
,所以有了这篇博客。 现象及原因 String.
value
Of() 重载方法 static String
value
Of(boolean b) static String
value
Of(char c) static String
value
Of(char[] data) static String
value
Of(c...
类型转换的那些事儿——浅谈.
value
Of()与parseDouble() and so on
在项目中,经常需要对数据类型进行转换,一不小心,一个NPE就来了,今天做一下笔记,提醒下自己。 以前我一直记得toString()会有
问题
,容易抛出
空指针异常
,用String.
value
Of()就可以了,所以我就形成了一种思维,对
关于String类contains方法和Long类的
value
Of方法的坑
每周坚持写技术博客的计划又再次失败了,最近公司开发任务比较多,平常休息节假日又把时间花在了其它事情上,所以有时间也变成没时间了。但这次不一样了,从这周开始我一定会更新1~2篇的技术博客到csdn上,欢迎各位同学监督。 上个月开发过程中踩了不少java的坑呀!今天的博客就给大家先讲两个坑,帮助大家在java开发过程中能少踩点坑!下面大体上以demo的形式跟诸位讲解下~ 第一个坑:String类的contains方法 看到这个方法估计大家再估计再熟悉不过了!但是!重要的事情强调三遍!千万不要让给.
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章