本帖最后由 theape 于 2016-9-4 17:27 编辑
[Java] 纯文本查看 复制代码 private static void demo() {
// 字符串常量 与 字符串常量拼接不会产生新的对象
// 字符串拼接如果出现变量就会产生新的对象。
int a = 2;
int b = 3;
final int af = 2;
final int bf = 3;
String c ="23";
String d = a + "" + b;
String e = 2 + "" + 3;
String f = af + "" + bf;
System.out.println(a + b + ""); //先求a+b的值再拼接
System.out.println(a + "" + b); //a与字符串常量拼接,字符串常量与b拼接
System.out.println("" + a + b); //字符串常量与a拼接,字符串常量与b拼接
System.out.println(c == d); // false 变量拼接的会产生新的对象
System.out.println(c == e); // true 常量拼接,不会产生新的对象
System.out.println(c == f); // true final修饰的为常量,同上
}
private static void demo4() {
final String s1 = "a";
final String s2 = "b";
String s3 = "ab";
String s4 = s1 + s2; //s1和s2都是常量
System.out.println(s3 == s4);
}
private static void demo3() {
//字符串与字符串对象拼接,会创建新的实例,变成三个对象
//字符串与字符串(或强转为字符串的基本类型值)拼接不会创建新的实例,保留一个对象。
String s1 = "我是String";
String s2 = new String("我是String");
s2 = s1 + ""; //false
s2 = "我是String"; //true
s2 = "我是" + "String"; //true
s2 = "我是String" + ""; //true
s2 = "" + new String("我是String"); //false
System.out.println(s1 == s2);
}
private static void demo2() {
String s = null;
System.out.println("s赋值为null打印输出:" + s);
System.out.println("null打印输出为:" + null);
System.out.println(s + "a");
System.out.println("2" + 3);
System.out.println(3 + "2");
int[] arr = new int[5];
System.out.println("数组的地址:" + arr);
arr = null;
System.out.println("数组赋值为空:" + arr);
}
private static void demo01() {
//空指针异常
String s = null;
System.out.println(s + "可以拼接字符串"); //输出null不报异常
System.out.println(s.length());
if ((s != null & s.length()==0)){}
}
最后我总结出来一句:
字符串常量 与 常量拼接不会产生新的对象,字符串拼接如果出现变量就会产生新的对象。
ps:先弄清楚什么是字符串常量
"这是一种字符串常量"
final String s = "这又是一种字符串常量";
final int a = 1; //这种常量与字符串常量拼接时会强转为字符串常量
|