corejava里的问题,我也在看
我的理解是
1。hireDay.clone()是把hireDay里的内容clone给cloned这个对象的hireday,这就是所谓的深度拷贝。如果不这么做,那么cloned这个对象中的hireday引用还是和worker指向同一个Date对象,这样做就破坏了封装性
2。String类不可变是指一旦new了一个String对象之后就不能再改变这个对象的内容,而如果new了一个Date对象之后,还可以对它进行改变
如:String s = new String("hello");
则"hello"就不能再改变了,除非你再让s引用重新指向另一个对象:
s = new String ("hi");
但不管怎么说,“hello”这个字符串对象是没有改变的,而是s引用指向了其他的一个对象,如果想要使用可以改变的字符串,可以使用StringBuffer类(coreJava Chap12有介绍)
而Date类却不相同,你可以使用setHours(),setMonth()等方法改变已有的对象
我的理解是
1。hireDay.clone()是把hireDay里的内容clone给cloned这个对象的hireday,这就是所谓的深度拷贝。如果不这么做,那么cloned这个对象中的hireday引用还是和worker指向同一个Date对象,这样做就破坏了封装性
2。String类不可变是指一旦new了一个String对象之后就不能再改变这个对象的内容,而如果new了一个Date对象之后,还可以对它进行改变
如:String s = new String("hello");
则"hello"就不能再改变了,除非你再让s引用重新指向另一个对象:
s = new String ("hi");
但不管怎么说,“hello”这个字符串对象是没有改变的,而是s引用指向了其他的一个对象,如果想要使用可以改变的字符串,可以使用StringBuffer类(coreJava Chap12有介绍)
而Date类却不相同,你可以使用setHours(),setMonth()等方法改变已有的对象
解决方案 »
- 帮忙看看为什么跳不到另一个界面
- 为什么url下载的html代码不完整
- 二维数组问题
- Java项目做好后打包问题?
- 初学java,while循环这里出问题了,怎么都想不通阿
- 关于substance look&feel
- 请问各位大虾!如何在Applet中显示Jfreechart生成的图像?????? 在线候教
- 还是jsp的小问题
- 谁能帮我解释一下这段代码?到底applet中的字幕是如何实现滚动的呢?谢谢!
- win2000怎么设置classpath
- 怎样用java程序打开WinXP的拨号连接对话框?
- reader/writer和inputStream/OutputStream哪个是对字节操作,哪个是对字符操作?
String是基本的数据类型
而date类是可以重写的
2、String采用堆分配存储表示,通过String的方法改变char成员,则该方法将返回改变后的new String。类可变是说通过相应的set方法改变类成员值域。
1.cloned.hireDay=(Date)hireDay.clone()里的hireDay.clone()是怎样工作的?有什么作用?想知道是怎样工作的,看Date的源码就知道了。它的作用是返回hireDay的一个拷贝,简单的说就是给你创建一个Date的对象,然后把成员变量做一一赋值,再返回给你。
2.String是不可变的类,Date是可变的 是指的什么?能不能举个例子。String采用immutable模式设计,它对外提供的所有public方法只能query内部数据,而不能modify内部数据,所以说从一个String创建好之后,String内部数据就一直保持不变,直到String对象被销毁,这就叫immutable模式(不变模式)。Date提供了很多setter方法,如:setDate()、setTime()等,这些方法直接修改了Date的内部数据,也就是说,Date创建好之后,它的内部数据可能会发生变化。不变类和可变类跟clone有那么一点点联系;不变类由于内部一直数据一致保持不变,本身就是线程安全的,多线程编程的时候,就不需要做保护性拷贝,因此,不变类一般都不会实现Cloneable接口,像String、Integer、Long等都是这样;可变类则不同,由于内部数据可变,不是线程安全的,所以提供clone方法,便于在多线程程序中做保护性拷贝。题外话:
由于sun的失误,Date被设计成了可变类,实际上Date应该被设计成不变类,像String,虽然sun后来意识到了这一点,但是已经为时过晚,为了兼容jdk以前的版本,sun只能这样继续错下去。