【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 }

 

posted @ 2014-03-30 16:47  代码简史  阅读(502)  评论(0编辑  收藏  举报