1 String field;
2 @Test
3 public void test01() {
4 String a = "aaa";
5 String b = "aaa";
6 String c = new String("aaa");
7 String d = new String("aaa");
8 System.out.println(a == b); //output: true
9 System.out.println(a == "aaa"); //output: true
10 System.out.println(a==c); //output: false
11 System.out.println(c==d); //output: false
12
13 String local;
14 System.out.println(field);
15 System.out.println(local); //无法通过编译
16 }
-----------
8 System.out.println(a == b); //output: true
9 System.out.println(a == "aaa"); //output: true
以上两句代码说明:
当使用非new方式来创建一个字符串对象s时,Java虚拟机会拿着这个s在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
10 System.out.println(a==c); //output: false
11 System.out.println(c==d); //output: false
以上代码说明:
只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
14 System.out.println(field);
15 System.out.println(local); //无法通过编译
以上代码说明:
在域变量中,String s; 与 String s = null; 是等价的,但是是局部变量中String s;声明的变量s是无法直接使用的。 |