new String比字符串池浪费空间,为什么要用它?

对于下面程序中:ss0 = new String( "hello" );是用new()来新建对象的,存于堆中。每调用一次就会创建一个新的对象。当然从节省空间的角度来讲,肯定不如str="hello",有童鞋一定问,那要它有什么用?当时设计编译器时,为什么要设计它?马克-to-win,那我请问你,如果在你编程序时,你还不知道字符串内容怎么办?这时就用到new String(String original),所以,什么都有什么的用处。

(注意不能看调试窗口里value id,eclipse的问题)
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
 
本章源码
public class Test
{
    public static void main(String args[]) {
        String str, str1, ss0, ss1, ss2, ss3, ss4;
        str = "hello";
        str1 = "hello";
        ss0 = new String("hello");
        ss1 = new String("hello");
        ss2 = new String("bye");
        ss3 = new String("chi le ma");
        ss4 = new String("chi le ma");
/* ==在测内存地址是否相同,如果相同,就证明是同一个对象。== means address space is the same.str and str1 point to the same
String constant.only one place
*/
        System.out.println(str1 == str);
        System.out.println(ss1 == ss0);
/* equals 是看内容是否相等,equals means as long as value is the same, it is the same.but == mean
memory address should be the same. */
        System.out.println(ss1.equals("hello"));
        System.out.println(str1 == "hello");
        System.out.println(ss1 == "hello");
    }
}




result is:

true
false
true
true
false

String class contains a static method, valueOf(). With it, you can create a String object from a value of any of the basic types
String pi = String.valueOf(3.14159);


String对象的运算符:“+”。用来连接两个字符串。




一件需要注意的事:

你不能写如下一段程序,系统会崩溃的,马克-to-win,因为他和lang包当中的类名String冲突,所以不要用lang包当中的类名当类名。因为lang包是核心包。you can not write a program like the following, the system will collapse. because it will collide with the class with the package of java.lang, so remember that don't try to use the name of class of java.lang package.

你可以用其他包当中的类名当类名写程序。比如io包当中File类。you can rewrite a class named File because it is java.io package.

class String{
String(int a)
{
System.out.println("a is"+a);
}
}
public class Test {
public static void main(String[] args) {
String d=new String(8);

}
}

输出结果:

java.lang.NoSuchMethodError: main
Exception in thread "main"