未初始化的String相 “+“ 为什么会打印出“nullnull“

 全文详见个人博客:https://www.coderli.com/null-string/

未初始化的String相 "+" 为什么会打印出“nullnull"今天在我的一个qq群里有人问了这样一个问题。 private static String a; private static String b; public static void main(String[] args) { String c = a+b; System.out.println(c); } 输出是nullnull。问为什么是这样。 其实问题并不复杂,很多同学也觉得自己知道原因,遂不予关注。但是我相信还是有初学Java的同学在这里是存在误会的。很典型的误会就是如一个群里的朋友说的String类型的变量如果没有显示初始化,默认的值就是”null”。支持的理由就是 private static String a; public static void main(String[] args) { System.out.println(a); } 输出是null。 这个现象确实很容易迷惑一些初学的人,包括我也忽略了挺久。其实呢证明这种想法错误很简单。如果默认值是null,那么就意味着,该变量不是空(null)。而是字符串的“null”。 private static String a; public static void main(String[] args) { System.out.println(a==null); System.out.println("null".equals(a)); } 上述代码输出分别是true,false。(呵呵,挺弱智的。) 说明String类型变量a,其实是空(null),而并没有被赋值。那么打印出null是为什么呢?我们查看PrintStream的源码就很清晰的明白了,其实是Java在println的时候进行了处理。 public void print(String s) { if (s == null) { s = "null"; } write(s); } 回到开头的问题,既然没有初始化赋值,那么输出为什么是”nullnull“,两个”null“连接的结果呢。这里略微细说一下,查看编译过的class文件,我们可以看到 public static void main(java.lang.St

记住今天,这是今天给你的sql,以后某几天会用到SELECT TOP (1000) [sno] ,[cno] ,[grade] FROM [xsgl].[dbo].[sc] snocnograde 20010100190 20010100287 20010100372 20010200458 20010300438 201105005NULL 21010100185 21010100262 21010200560 21010300578 21010400453 210104005NULL 21010500448 22010100392 22010100480 22010100598 22010200155 22010300152SELECT TOP (1000) [cno] ,[cname] ,[credit] ,[pcno] FROM [xsgl].[dbo].[course] cnocnamecreditpcno 001数学 6NULL 002英语 4NULL 003高级语言 4001 004数据结构 4003 005数据库原理 3004 006信号与系统 2NULL 007有机化学 2NULL 008大学物理 2NULL 106测试课程 0NULLSELECT TOP (1000) [sno] ,[sname] ,[ssex] ,[sage] ,[sdept] ,[avg_grade] ,[cnt_course] FROM [xsgl].[dbo].[student] snosnamessexsagesdeptavg_gradecnt_course 110100张思 测19英语系NULLNULL 110101李四 NULL19英语系NULLNULL 200101王小虎 男18信息工程系NULLNULL 200102李云 女20英语系NULLNULL 200103吴钢 男19化学系NULLNULL 201101侯凡纬 男19英语系NULLNULL 201104余林佳 男19英语系NULLNULL 201105侯琦 女19化学系NULLNULL 210101郭敏 女18信息工程系NULLNULL 210102高灵 女21计算机系NULLNULL 210103高大山 男20计算机系NULLNULL 210104王欣宜 女21计算机系NULLNULL 210105孙承伟 男19信息工程系NULLNULL 210106常会茜 女19计算机系NULLNULL 210107万铠 男21计算机系NULLNULL 210108丁虹 女23计算机系NULLNULL 220101郝炜 男19数学系NULLNULL 220102丁旭 男20数学系NULLNULL 220103陈庆 男22物理系NULLNULL 220104叶巧 女21物理系NULLNULL
最新发布
11-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值