惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
N
Netflix TechBlog - Medium
罗磊的独立博客
博客园 - 聂微东
美团技术团队
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园_首页
宝玉的分享
宝玉的分享
G
GRAHAM CLULEY
Microsoft Azure Blog
Microsoft Azure Blog
量子位
SecWiki News
SecWiki News
F
Fortinet All Blogs
J
Java Code Geeks
S
SegmentFault 最新的问题
V
V2EX
Martin Fowler
Martin Fowler
F
Full Disclosure
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
S
Security Affairs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
S
Secure Thoughts
S
Schneier on Security
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
Cloudbric
Cloudbric
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
V2EX - 技术
V2EX - 技术
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
C
Check Point Blog
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
Hacker News - Newest:
Hacker News - Newest: "LLM"
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tenable Blog
博客园 - 【当耐特】

博客园 - Star.Stroll

【Chrome扩展】Reload image 重载图片 [原创]RegularJS [原创]虚拟化技术真的能让企业降低成本吗? [原创]纯Java获得本地MAC地址 [原创]GCC动态链接库的编译与使用简例 [原创]Cygwin的中文支持(解决乱码) [原创]程序员日志:自制随笔程序 [原创]程序员日志:程序员的快捷方式 [原创]Java Socket(套接字)自学笔记1 [原创]透明的DIV提示框(兼容IE与Firefox) 深入HashCode方法 JavaScript代码实例:拖动对象 Drag Object (兼容:IE、Firefox、Opera ... ) Tomcat中用web.xml控制Web应用详解(2) Tomcat中用web.xml控制Web应用详解(1) java.sql.ResultSet 新增、更新、刪除資料 [原创]一个简单例子解释 Java 工厂模式 Java 范型编程 Singleton模式(单态模式) Builder模式
[原创]Object.clone()的作用与用法
Star.Stroll · 2008-01-29 · via 博客园 - Star.Stroll

    java.lang.Object里面有一个方法clone(),看方法说明就知道是用于复制对象的可是方法确实protected(受保护)类型的.看得到却用不到.
    其实clone()被定义为protected是有原因的,因为有些时候某些类实例我们不希望能被复制.那我们怎么用这个方法呢?只要使用一个super关键字就够了.下面例子可以解释清楚clone()的作用与其用法:

 1public class C 
 2{
 3    static class Strings implements Cloneable
 4    {
 5        private String str;
 6
 7        public void SetStr(String s){
 8            this.str = s;
 9        }

10        
11        public String GetStr(){
12            return this.str;
13        }

14        
15        public Object clone()throws CloneNotSupportedException{
16            return super.clone();
17        }

18    }

19
20    public static void main(String[] args) 
21    {
22        try{
23            Strings str1 = new Strings();
24            str1.SetStr("Hello World!");
25
26            System.out.println("-----------------");
27            
28            System.out.println("str1.SetStr(\"Hello World!\");");
29            System.out.println("str2 = (Strings)str1.clone();");
30            Strings str2 = (Strings)str1.clone();
31            System.out.println("str1:"+str1.GetStr());
32            System.out.println("str2:"+str2.GetStr());
33            System.out.print("print object str1:");
34            System.out.println(str1);
35            System.out.print("print object str2:");
36            System.out.println(str2);
37
38            System.out.println("-----------------");
39
40            System.out.println("str2.setStr(\"Hello!\");");
41            str2.SetStr("Hello!");
42            System.out.println("str1:"+str1.GetStr());
43            System.out.println("str2:"+str2.GetStr());
44            System.out.print("print object str1:");
45            System.out.println(str1);
46            System.out.print("print object str2:");
47            System.out.println(str2);
48
49            System.out.println("-----------------");
50
51            System.out.println("str1 = str2;");
52            str1 = str2;
53            System.out.print("print object str1:");
54            System.out.println(str1);
55            System.out.print("print object str2:");
56            System.out.println(str2);
57
58            System.out.println("-----------------");
59        }
catch(Exception ex){
60            System.out.println(ex.toString());
61        }

62    }

63}

运行结果:

-----------------
str1.SetStr(
"Hello World!");
str2 
= (Strings)str1.clone();
str1:Hello World
!
str2:Hello World
!
print object str1:C$Strings@de6ced
print object str2:C$Strings@c17164
-----------------
str2.setStr(
"Hello!");
str1:Hello World
!
str2:Hello
!
print object str1:C$Strings@de6ced
print object str2:C$Strings@c17164
-----------------
str1 
= str2;
print object str1:C$Strings@c17164
print object str2:C$Strings@c17164
-----------------

    由运行结果可以看出通过clone方法返回的对象是一个新对象,而且其属性与原对象完全一致,也就是原对象的副本.而通过"="赋值的话却得到的是同一个对象.