1 package stu;
2
3 public class TestStr {
4 /**
5 * @param args
6 */
7 public static void main(String[] args) {
8 // 虚拟机是将字符串直接量(不用new声明的)对象放到一个对象池中去缓存的,
9
10 // 第一次使用的时候会将其放入池中,
11
12 // 如果下次有其他变量访问一摸一样的直接量的话直接从对
13
14 // 象池中去取该直接量,而不是又再生成一个对象。一般该池中的对象都不会被垃圾回收器回收。
15
16 String s1 = "1";
17 String s2 = "1";
18 System.out.println(s1 == s2); // true
19
20 // 在编译时就能确定的值,在编译的时候就能够确定是否创建新的对象池对象
21 String s3 = "zxc123";
22 String s4 = "zxc" + 1 + "2" + "3";
23 System.out.println(s3 == s4); // true
24
25
26 String s5 = "zxc123";
27 // 字符串拼接包含了函数,变量等等编译时不确定因素,那么此时就不能指向对象池中的变量了
28 String s6 = "zxc" + "1".length() + "2" + "3";
29 System.out.println(s5 == s6); // false
30
31 String s7 = new String("Hello");
32 String s8 = new String("Hello");
33 System.out.println(s7 == s8);// false
34
35 int num = 1;
36 String str = num + (33.567 + "");
37 System.out.println(str);// 133.567
38
39 int sum = 2;
40 sum += 22.56; // 复合运算符本身还隐式的包含了一个强制转型的动作 等价于 sum=(int) (sum+22.56);
41 System.out.println(sum); // 24
42
43 short m = 32767; // -32768~32767
44 m += 1.89; // 符合运算符自身还隐式地包含了一个强制转型的动作这样做有时候会失去精度以及高位段位。
45 System.out.println(m); // -32768
46
47 System.out.println(11+1l);//11+1L=12;
48
49 }
50 }
![]()