今天在研究Java面试题的时候发现了这道题,觉得挺有意思,记录下来。
一个为null的字符串被println出来会是什么呢。
public static void main(String[] args) {
String s = null;
System.out.println(s+"aaaa");
}
输出是“nullaaaa”
这是为什么呢,String未被初始化是不可能成为“null”的,因为它是null的。
翻看了一下PrintStream,发现在他打印的时候做了马脚,源码是这样子的
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
还有一个附加的问题是如果打印s+s会发生什么情况,两个null变量相加被打印,首先执行的是相加,查看反编译的Java代码知道是执行了StringBuilder的append方法,我们查看源码
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
发现一样对null的字符串进行了特殊的处理。
PS:新浪SAE怎么这么不给力啊,我的网站上不去。
http://www.liubey.org
分享到:
相关推荐
springboot 处理返回结果中字段为空或为null,不展示字段的问题(字段展示不全),给为空字段初始化值,如:字符串null转换为"
但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在...
* 向串口中写进字符串命令 * @param s 字符串命令 * @throws Exception 异常 */ public void writeln(String s) throws Exception { out.write(s); out.write('\r'); out.flush(); } /** * 读取COM命令...
String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。 String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”)...
9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...
141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet...
9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类 227 9.3.1 StringBuffer:专业操纵字符 228 9.3.2 String...
通过IndexWriter索引器的构造函数,以及它初始化时调用的一个init方法,可以了解一个IndexWriter索引器的构造最重要的是在init方法中的初始化工作。它主要实现了根据指定的建立索引的方式(重写、追加写入),通过...
String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。 String x=”a” 4 ”c”编译时等效于String x=new StringBuffer().append(“a”...
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...
17.2.3 字符串模式匹配 17.2.4 逻辑运算 17.2.5 集合运算 17.3 小结 17.4 思考题 第18章 Hibernate的检索方式(下) 18.1 连接查询 18.1.1 默认情况下关联级别的运行时检索策略 18.1.2 迫切左外连接...
/*把texta中获得的文本,进行初始化,与原 " "字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/ " "texta.setText(null); " "int n; " "char secret=' '; " "for(int i=0;i;i++) " "{ " "char c=...
varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...
5,字符串常量。将一个或者多个字符用双引号(“ ”)标识。 6,null常量。只有一个数值就是:null. 对于整数:有四种表现形式。 •二进制:0,1 ,满2进1. •八进制:0-7 ,满8进1. 用0开头表示。 •十进制:0-...
1概念 2指令 if, else, elseif switch, case, default, break list, break include Import compress escape, noescape ...在模板里对sequences和hashes初始化 注释标志 sequences内置方法 hashes内置方法
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法...
谜题85:惰性初始化 Java谜题9——高级谜题 谜题86:有毒的括号垃圾 谜题87:紧张的关系 谜题88:原生类型的处理 谜题89:泛型迷药 谜题90:荒谬痛苦的超类 谜题91:序列杀手 谜题92:双绞线 谜题93:类的...