public class NullTest {
public static void main(String[] args) {
String str1=null;
String str2=null;
String str3=str1+str2;
System.out.println(str3);//问题1,别运行,打印什么?
//问题2,str3存储在哪?
//问题3System.out.println(str3==?);这里的?写什么才会打印true
}
}
解决方案 »
- java web project 问题?大神救助此问题?
- spring的注解注入问题,注入失败,求解
- 菜鸟提问
- hibernate 4 sqlserver2005方言的问题
- org.apache.jasper.JasperException: java.lang.ClassCastException: org.apache.stru
- 为什么装tomcat的时候提示我没有发现java虚拟机
- *******请教各位大侠:帮帮我!!!!!!!!!!!!!!!**
- jbuilder8下整合weblogic7的一个问题!(在线等待!)
- 百分送出!Java程序中读Oracle表数据是乱码 在线等!!!
- tomcat无法启动的问题,请教!
- 递归 该怎么用??
- Java Web开发新手疑问
2 管他存在哪:)
3 str3
2.存在你的机机的内内上
3.str3
String str2=null;
String str3=str1+str2;
等价于:
String str3 = new StringBuilder().append((String)null).append((String)null).toString();
append(String)的源码: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;
}
http://so.csdn.net/search?q=String+%E7%9B%B8%E7%AD%89&sort=&rt=h&t=thread
String对象相加,内部会使用StringBuilder来操作,就像10L说的
所以 str1+str2 会变成 StringBuilder.apennd("null").append("null")2
str3保存在堆中3
从1可以知道,str3是由StringBuilder对象的toString方法在堆中生成的对象,除了str3外没有其他引用变量引用该对象,所以只能自己==自己,才能返回 true
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification。 我竟然刚知道