在学习《算法》的时候, P42中提到赋值语句不会创建新的对象, 而只是创建另一个指向某个已经存在的对象的引用
并且,在Java中, 所有的非原始数据类型都是对象, 包括数组
Java中原始的数据类型有: byte,short,int,long,char,float,double和boolean。
这些基本类型可以分为四组: |
回到刚才的问题上, 但在练习中出现了如下代码,
// PrintString_04.java |
Java中的String对象不可变, 对对象赋值是指向等号右边对象的引用, 但对String对象赋值时, 等号右边的双引号中的字符串, 实际上是新创建了一个对象, 指向了新对象的引用。
主要困惑我的地方,一开始没看清楚String和42页左下角Counter对象在赋值时候的区别。Counter c1 = new Counter("ones");
c1.increment();
Counter c2 = c1;
c2.increment();
StdOut.println(c1);
那段代码的第三行,Count c2 = c1; // c1是不是创建新的对象的,c2指向的就是c1的地址
而string2 = "world"; // 看似差不多, 实际上"world"是个新对象, string2指向新对象
目前, 因为String的不变性, 我暂时把String理解成和原始数据类型一样来操作, 就可以了.
ref:
https://blog.csdn.net/ilvest/article/details/64904520
https://blog.csdn.net/zhangjg_blog/article/details/18319521