String test = "this is a string"和 String test = new String("this is a string");效果上一样,但本质是有区别的,前一个创建时首先回到内存池中寻找是否存在该字符串,如果存在直接拿来,如果不存在则新创建一个,而后者无论如何都新创建一个字符串对象。所以这就是很多书上说的推荐用前者而不用后者。 jdk的类包在jdk\jre\lib\rt.jar里面
1、String是java中一个特殊的对象,他不属于基本数据类型,但又可以象基本数据类型一样当左值使用。 其实String test1 = "this is a string",它是把test指向一个字符串池(不从新分配内存)。 而String test2 = new String("this is a string");是开辟一块新的内存区域。 所以: String test1 = "this is a string"; String test2 = new String("this is a string"); test1 = test2 ? yes, no 肯定返回no,因为他们指向的地址不一样。
谢谢! 为什么 String test=new String("this is a string"); 可以写成 String test="this is a string";
jdk的类包在jdk\jre\lib\rt.jar里面
其实String test1 = "this is a string",它是把test指向一个字符串池(不从新分配内存)。
而String test2 = new String("this is a string");是开辟一块新的内存区域。
所以:
String test1 = "this is a string";
String test2 = new String("this is a string");
test1 = test2 ? yes, no
肯定返回no,因为他们指向的地址不一样。
为什么 String test=new String("this is a string");
可以写成 String test="this is a string";
先new一個String,再直接賦值
String s1 = new String("this");
String s2 = "this";這時候s1和s2相等嗎,照bhr的說法,如果存在,直接拿來,這時候拿來的是什麼?
value還是直接傳引用?我試了一下,s1和s2還是兩個不同的object
可是if(s1==s2)還是false啊
String test = "this is a string";
和
String test = new String();
完全一样,对string.
2.在jdk\lib\*.jar中
而且最好把变量看成一个某个对象类型的句柄,这样比较好理解的。