关于null、“”、“null”的一个有关问题

关于null、“”、“null”的一个问题
这个问题在论坛发过一次,这里记录一下吧。
就是一个a=null那打印a会是什么呢?
结果是"null"字符串。
有人说原因是
对String的+操作实际上是通过StringBuilder实现的,也就是append方法
该方法会将将null转换为“null”字符串,所以得到的结果是c="null"
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class testNull {
	/**
	 * @param grossofans
	 */
	public static void main(String[] args) {
		String a = null;
		String b = "";
		String c = b + a;
		// null+""=null ""+null=null
		if (c == null) {
			System.out.println("null 空");
		}
		if ("null".equalsIgnoreCase(c)) {
			System.out.println("null 字符串");
		}
		if ("".equalsIgnoreCase(c)) {
			System.out.println("空字符串");
		}
		System.out.println(c == null);
		System.out.println(a == null);
		String bb = "|";
		String aa = null;
		Integer i = null;
		Object o = null;
		boolean s1 = true;
		boolean s2 = false;
		String cc = aa + bb + i + bb + o + bb + null + bb + s1 + bb + s2;
		System.out.println(cc);

	}
}

1 楼 JeffLan 2011-10-12  
引用
对String的+操作实际上是通过StringBuffer实现的,也就是append方法

在我的印象中:String的“+”操作会重新创建一个String对象,所以做大量字符串拼接的时候,为了优化性能得改用StringBuffer。
但我也没看过JVM源码,也看不懂。我说的也不一定对,或许你说的是对的。
2 楼 grossofans 2011-10-13  
JeffLan 写道
引用
对String的+操作实际上是通过StringBuffer实现的,也就是append方法

在我的印象中:String的“+”操作会重新创建一个String对象,所以做大量字符串拼接的时候,为了优化性能得改用StringBuffer。
但我也没看过JVM源码,也看不懂。我说的也不一定对,或许你说的是对的。

<去这看一下,你应该有收获,我也是当时问了一下才大概明白的,你说那个情况应该也没什么问题,原来我也是这样理解的>http://www.iteye.com/problems/65463
3 楼 JeffLan 2011-10-13  
grossofans 写道
JeffLan 写道
引用
对String的+操作实际上是通过StringBuffer实现的,也就是append方法

在我的印象中:String的“+”操作会重新创建一个String对象,所以做大量字符串拼接的时候,为了优化性能得改用StringBuffer。
但我也没看过JVM源码,也看不懂。我说的也不一定对,或许你说的是对的。

<去这看一下,你应该有收获,我也是当时问了一下才大概明白的,你说那个情况应该也没什么问题,原来我也是这样理解的>http://www.iteye.com/problems/65463


String的“+”操作是通过StringBuffer将两字符串拼接在一起,然后再调用toString方法构造一个新的String对象