等号是属于地址传递,这样做的结果会导致,修改a2的值同时也许会修改a1. 我在做程序的时候是用过一种方法.不过是用list进行复制的.不过你可以试一下.import java.util.LinkedList ; import java.util.List ;/* * 作成日: 2005/12/23 * public class test { public static void main ( String[] args ) { List test = new LinkedList () ; for ( int i = 0 ; i < 5 ; i++ ) { test.add ( i , "str" + i ) ; } for ( int i = 0 ; i < 5 ; i++ ) { System.out.println ( (String)test.get ( i ) ) ; } System.out.println("**************************");
List testSample = new LinkedList ( test ) ; for ( int i = 0 ; i < 5 ; i++ ) { System.out.println ( (String)testSample.get ( i ) ) ; } System.out.println("**************************"); for ( int j = 0 ; j < 5 ; j++ ) { if ( j > 3 ) { testSample.set ( j , "sample" ) ; } } for ( int i = 0 ; i < 5 ; i++ ) { System.out.println ( (String)testSample.get ( i ) ) ; } System.out.println("**************************"); for ( int i = 0 ; i < 5 ; i++ ) { System.out.println ( (String)test.get ( i ) ) ; } System.out.println("**************************");
firstResult = (HashMap) reMap.clone();一般我都这么用,如果只是简单的firstResult=reMap ,那么在改变其中一个值另一个也改变,呵呵,想想这是为什么吧?
我在做程序的时候是用过一种方法.不过是用list进行复制的.不过你可以试一下.import java.util.LinkedList ;
import java.util.List ;/*
* 作成日: 2005/12/23
*
public class test { public static void main ( String[] args ) {
List test = new LinkedList () ;
for ( int i = 0 ; i < 5 ; i++ ) {
test.add ( i , "str" + i ) ;
}
for ( int i = 0 ; i < 5 ; i++ ) {
System.out.println ( (String)test.get ( i ) ) ;
}
System.out.println("**************************");
List testSample = new LinkedList ( test ) ;
for ( int i = 0 ; i < 5 ; i++ ) {
System.out.println ( (String)testSample.get ( i ) ) ;
}
System.out.println("**************************");
for ( int j = 0 ; j < 5 ; j++ ) {
if ( j > 3 ) {
testSample.set ( j , "sample" ) ;
}
}
for ( int i = 0 ; i < 5 ; i++ ) {
System.out.println ( (String)testSample.get ( i ) ) ;
}
System.out.println("**************************");
for ( int i = 0 ; i < 5 ; i++ ) {
System.out.println ( (String)test.get ( i ) ) ;
}
System.out.println("**************************");
}
}
执行结果:
str0
str1
str2
str3
str4
**************************
str0
str1
str2
str3
str4
**************************
str0
str1
str2
str3
sample
**************************
str0
str1
str2
str3
str4
**************************从执行结果可以看出,两个LIST是不同的,在修改过第二个list后,前一个list的值没有改变.
如果是自己写的类,可以让类具有能克隆的方法:
具体方法如下:
自己的类做成:我测试用的是fatherClone 这个类,要复制它.
/*
* 作成日: 2005/12/23
*
* TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/package objectClone ;import java.io.Serializable ;/**
* @author wg
*
* TODO この生成された型コメントのテンプレートを変更するには次へジャンプ: ウィンドウ - 設定 - Java - コード・スタイル -
* コード・テンプレート
*/
public class fatherClone implements Serializable , Cloneable { String name = null ; String age = null ; String monkey = null ; String address = null ; public Object clone () throws CloneNotSupportedException {
return super.clone () ;
} /**
* @return address を戻します。
*/
public String getAddress () {
return address ;
} /**
* @param address address を設定。
*/
public void setAddress ( String address ) {
this.address = address ;
} /**
* @return age を戻します。
*/
public String getAge () {
return age ;
} /**
* @param age age を設定。
*/
public void setAge ( String age ) {
this.age = age ;
} /**
* @return monkey を戻します。
*/
public String getMonkey () {
return monkey ;
} /**
* @param monkey monkey を設定。
*/
public void setMonkey ( String monkey ) {
this.monkey = monkey ;
} /**
* @return name を戻します。
*/
public String getName () {
return name ;
} /**
* @param name name を設定。
*/
public void setName ( String name ) {
this.name = name ;
}
}
测试代码:
/*
* 作成日: 2005/12/23
*
* TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/package objectClone ;/**
* @author wg
*
* TODO この生成された型コメントのテンプレートを変更するには次へジャンプ: ウィンドウ - 設定 - Java - コード・スタイル -
* コード・テンプレート
*/
public class cloneTest { public static void main ( String[] args ) {
fatherClone test = new fatherClone () ;
test.setAddress ( "abce" ) ;
test.setAge ( "129" ) ;
test.setMonkey ( "12wan#" ) ;
test.setName ( "ccwg" ) ;
try {
fatherClone test2 = (fatherClone)test.clone () ;
test2.setName("tom");
System.out.println(test.getName());
System.out.println(test.getAge());
System.out.println("*************************");
System.out.println(test2.getAge());
System.out.println(test2.getName());
} catch ( Exception e ) {
e.printStackTrace () ;
}
}
}我测试过