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 }