【Java基础】字面量相加的类型转换
Java字面量的相加类型转换
1、Java 编译期间(javac),凡是字面量和常量的运算,都会先运算出结果
2、运行期当字符串池中有 String"字面量"时,Java 会直接用,如果没有才创建,在以下代码中,在编译时运行的代码行会预先在String池中寻找字面量,
如果存在,就直接复用,不再创建。
在以下的demo中:
字符串 ss 进行的是变量运算,是在运行时执行,且产生了新对象。所以比较结果为false。
对于 s4 ,前3个char型被当成int 型进行运算,实际相加的是该字符的ASCII码值。所以结果为 150abc。
对于 s5 ,1虽然为int型,但加上String "abc" 后,又被强转成了String型。
对于 s6 ,前两个int值会在编译期间预先算出结果,所以最终s6=33abc。
而String s7和s8都进行了new操作,强制创建了新的字符串对象,开辟了新的内存空间,所以两个都为FALSE。
1 public class StaticStringDemo { 2 public static void main(String[] args) { 3 4 String s = "123abc"; 5 String ss = s + ""; // 变量运算在运行期执行,产生新对象 6 String s1 = "123abc"; 7 String s2 = "123" + "abc"; // 字面量运算在编译时优化 8 String s3 = "1" + "23" + "abc"; 9 String s4 = '1' + '2' + '3' + "abc";// 结果为 150abc,因为前3个字符会被当做int进行加运算。 10 String s5 = 1 + "23abc"; 11 String s6 = 1 + 2 + "3abc"; 12 String s7 = new String("123abc"); 13 String s8 = new String("123" + "abc"); 14 System.out.println(s == s1); // true 15 System.out.println(s == ss); // false 16 System.out.println(s == s2); // true 17 System.out.println(s == s3); // true 18 System.out.println(s == s4); // false 19 System.out.println(s == s5); // true 20 System.out.println(s == s6); // false 21 System.out.println(s == s7); // false 22 System.out.println(s == s8); // false 23 // 注意:以上的 == 是比较变量的值是否相等或是否是同一个对象 25 26 } 27 28 }
本文版权归作者和博客园共有,转载请在文章页面明显位置标明原文链接。