本文共 1247 字,大约阅读时间需要 4 分钟。
在Java中,对象内存管理遵循重要的原则:除非明确调用new String()
、.clone()
或system.arraycopy()
等现实新建内存的方法,否则引用默认情况下指向的内容并不占用额外空间。这种机制在空间利用方面具有优势,但同时带来安全性挑战。假设一个银行的客户端变量与银行的内部数据库直接关联,若客户端被修改,数据库自然会受到影响。
###浅拷贝与深拷贝对比
####浅拷贝
this.sc = sc;
这种方式。String s1 = "Cui pf";String s2 = new String(new char[]{'C','u','i',' ','p','f'});System.out.println(s1==s2); //输出false,反映地址不同System.out.println(s1.equals(s2)); //输出true,反映内容相同(浅拷贝)
int[] score = {10, 100, 40, 80};Score sc = new Score(score);sc.printSc(); //输出[10, 100, 40, 80] score[2] = 89;sc.printSc(); //输出[10, 100, 89, 80]
####深拷贝
clone()
方法或手动复制每个元素,确保对象的独立性。String s1 = "Cui pf";String s2 = new String(new char[]{'C','u','i',' ','p','f'});System.out.println(s1==s2); //输出false,反映地址不同System.out.println(s1.equals(s2)); //输出true,反映内容相同(深拷贝)
int score[] = new int[]{10, 100, 40, 80};Score sc = new Score(score);sc.printSc(); //输出[10, 100, 40, 80]
由于采用了深拷贝,sc
中存储的数组与外部score
数组没有关联,因此改变外部数组不会影响sc
内部数据。
###注意事项
new
、.clone()
或Arrays.copyOf()
等明确方法创建新对象。###总结理解浅拷贝和深拷贝的区别对于Java编程至关重要。正确的做法取决于具体需求,既要保证开发效率,又要确保系统安全。请根据业务场景合理选择,避免因粗心导致安全漏洞。
转载地址:http://xuvqz.baihongyu.com/