String test = "this is a string";  
實際上等同與;
String test=new String("this is a string");在jdk\lib\*.jar中

解决方案 »

  1.   

    String test = "this is a string"和 String test = new String("this is a string");效果上一样,但本质是有区别的,前一个创建时首先回到内存池中寻找是否存在该字符串,如果存在直接拿来,如果不存在则新创建一个,而后者无论如何都新创建一个字符串对象。所以这就是很多书上说的推荐用前者而不用后者。
    jdk的类包在jdk\jre\lib\rt.jar里面
      

  2.   

    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,因为他们指向的地址不一样。
      

  3.   

    谢谢!
    为什么 String test=new String("this is a string");
    可以写成 String test="this is a string";
      

  4.   

    String是类,创建的test对象具有一些方法的test.~~~~
      

  5.   

    直接付值是一种初始化方法,java 的一些"基本类型"可以这样操作
      

  6.   

    我有一個疑問:
    先new一個String,再直接賦值
    String s1 = new String("this");
    String s2 = "this";這時候s1和s2相等嗎,照bhr的說法,如果存在,直接拿來,這時候拿來的是什麼?
    value還是直接傳引用?我試了一下,s1和s2還是兩個不同的object
      

  7.   

    不是讲的很清楚吗,都是生成string对象,只不过一个是先看看对象池中有没有,如果有就不创建,一个是无论怎样都创建一个新的对象!
      

  8.   

    對啊,如果是先new,這時String s2="this",看到對象池里應該有"this"了吧,如果有就不創建,那s2和s1就是相同的對象了(內存地址相同)?
    可是if(s1==s2)還是false啊
      

  9.   

    1.书上说的没错,java文档里有的。
    String test = "this is a string";  

    String test = new String(); 
    完全一样,对string.
    2.在jdk\lib\*.jar中
      

  10.   

    用new 创建的对象是存在于堆中的,而用一般方法建立的是存在于堆栈中的。
    而且最好把变量看成一个某个对象类型的句柄,这样比较好理解的。