对你的答案做了一个引申: class Test { public String str = "Hello";public: Test() { } };现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?
对你的答案做了一个引申: class Test { public String str = "Hello";public: Test() { } };现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?有人吗?
在A类中声明了一个方法func 打印输出X的值 这就相当于get方法 对外提供了一个外部可以访问私有变量的方法,只要知道声明是get 和set方法,理解这个应该不难第二个问题
可以直接重写equals()方法,修改成你需要的方法就OK了
至于你的小问题,所有的对象是可以用==比较的,但是比较的是对象的地址,如果要比较对象的值 还是先覆盖equals方法,在进行比较
第三个问题
给你举个例子
String s1 = "abc";//新创建, 字符串常量池中没有该串,则会这池中创建一个字符串“abc”
String s2 = “abc”; 字符创常量池中已经存在“abc“。则s2会去指向常量池中的”adc'' 而不是去创建一个新的
String s3 = new String(”abc“);直接去堆中开辟一个新的空间,而不是去池中查找
对你的答案做了一个引申:
class Test
{
public String str = "Hello";public:
Test()
{
}
};现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?
对你的答案做了一个引申:
class Test
{
public String str = "Hello";public:
Test()
{
}
};现在有2个兑现,由于它们的str的值,都为"Hello";也就说,第一个Test对象创建的时候,new了一个String, 第2个Test对象,不会new String.它们指向同一块内存空间。好了第一个对象修改了str,那么是否第2个Test也会被影响到?有人吗?
回答: 为了简化内存空间,String 的处理是个非常特殊的过程,你在new String 的时候仅仅将引用给引用者,而内容一致指向一块固定的内存,由JVM自己回收。 如果你修改了第一个str 不会影响到第二个。