关于String s1 = new String("abc");我想问下,貌似类在加载后常量池中会分配abc,可是在这条语句执行后,堆中的String对象又会包含char数组,我怎么感觉有重复啊,这样做有什么目的吗 (这个是我最疑惑的)
[code="java"] String s= new String("abc");反汇编指令:
Code:
Stack=3, Locals=2, Args_size=1
0: new #2; //class java/lang/String [color=red] //这里new过之后栈中应该会存在对象的引用吧?[/color]
3: dup
4: ldc #12; //String abc [color=red] //这里又将常量池的14号压入栈是何目的呢 ?[/color]
6: invokespecial #14; //Method java/lang/String."":(Ljava/lang/String;)V
9: astore_1
10: return [/code]
tip:请问常量池中的abc值是以什么方式存在的呢?是一个对象吗,我想应该是的吧,因为String s = "abc";返回的s指向的应该是一个对象才是啊,但是这条语句也没有new啊
String s = "abc"指令:
[code="java"] 0: ldc #12; //String abc [color=red] //应该说仅仅将常量池的abc压入栈中吧?没有创建对象是吗[/color]
2: astore_1
3: getstatic #10; //Field java/lang/System.out:Ljava/io/PrintStream;
6: aload_1
7: invokevirtual #13; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
10: return [/code]
我想再问下,public native String intern();有何使用场景啊,java doc虽然看的懂,但是不知道哪里可以用的着