小编gaj*_*y p的帖子

String s ="sometext"如何工作?

在面向对象的语言中,新对象的创建是通过使用new关键字(因为java中的内存分配是动态完成的).

即使String是一个类,如何在没有关键字的情况下创建其对象?

即使它使用字符串池我也无法清楚地理解它: "可以创建一个用户定义的类,我们可以像String一样直接初始化变量"

java oop string

4
推荐指数
1
解决办法
114
查看次数

System.arraycopy() 带有基元和对象引用的浅复制或深复制

我在某处读到System.arraycopy确实为原始数据类型创建了新副本并为对象引用创建了浅复制。

所以,我开始用下面的代码进行实验

//trying with primitive values
int a[] ={1,2,3};
int b[] = new int[a.length];
System.arraycopy(a,0,b,0,a.length);
b[0] = 9;
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
//now trying with object references
Object[] obj1 = {new Integer(3),new StringBuffer("hello")};
Object[] obj2 = new Object[obj1.length];
System.arraycopy(obj1,0,obj2,0,obj1.length);
obj1[1] = new StringBuffer("world");
System.out.println(Arrays.toString(obj1));
System.out.println(Arrays.toString(obj2));
Run Code Online (Sandbox Code Playgroud)

输出是

[1, 2, 3]
[9, 2, 3]
[3, world]
[3, hello]
Run Code Online (Sandbox Code Playgroud)

但我所期望的是

[1, 2, 3]
[9, 2, 3]
[3, world]
[3, world]
Run Code Online (Sandbox Code Playgroud)

从上面的代码中,我了解到System.arraycopy对象引用是否进行深复制如果是这样,如何 obj1[0] == obj2[0]给出true

java arrays deep-copy shallow-copy

4
推荐指数
1
解决办法
4127
查看次数

标签 统计

java ×2

arrays ×1

deep-copy ×1

oop ×1

shallow-copy ×1

string ×1