String str = new String("hell");  到底产生了几个对象?

解决方案 »

  1.   

    先回答第一个问题 
    在A类中声明了一个方法func 打印输出X的值 这就相当于get方法 对外提供了一个外部可以访问私有变量的方法,只要知道声明是get 和set方法,理解这个应该不难第二个问题 
    可以直接重写equals()方法,修改成你需要的方法就OK了
    至于你的小问题,所有的对象是可以用==比较的,但是比较的是对象的地址,如果要比较对象的值 还是先覆盖equals方法,在进行比较
     第三个问题 
    给你举个例子 
    String s1 = "abc";//新创建, 字符串常量池中没有该串,则会这池中创建一个字符串“abc”
    String s2 = “abc”; 字符创常量池中已经存在“abc“。则s2会去指向常量池中的”adc'' 而不是去创建一个新的 
    String s3 = new String(”abc“);直接去堆中开辟一个新的空间,而不是去池中查找
      

  2.   

    原来java中的字符串只有一种,即:String , char [] ------这种根本就不是字符串。
      

  3.   


    对你的答案做了一个引申:
    class Test
    {
    public String str = "Hello";public:
    Test()
    {
    }
    };现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?
      

  4.   


    对你的答案做了一个引申:
    class Test
    {
    public String str = "Hello";public:
    Test()
    {
    }
    };现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?有人吗?
      

  5.   

    commons有EqualsBuilder和HashcodeBuilder
      

  6.   


    回答: 为了简化内存空间,String 的处理是个非常特殊的过程,你在new String 的时候仅仅将引用给引用者,而内容一致指向一块固定的内存,由JVM自己回收。 如果你修改了第一个str 不会影响到第二个。