Java在方法中数组间直接'="赋值没变化的原因
2013-12-10 21:29
399 查看
public class ArrayTest { public static void main(String[] args) { //ArrayTest test = new ArrayTest(); int[] arrayA = {1, 1, 1, 1, 1, 1}; ChangeArrayOne(arrayA); for(int i = 0; i < arrayA.length; i++) { System.out.print(arrayA[i]); } System.out.println(""); ChangeArrayTwo(arrayA); for(int i = 0; i < arrayA.length; i++) { System.out.print(arrayA[i]); } } public static void ChangeArrayOne(int[] tarArr) { int[] arrayB = {0, 0, 0, 0, 0, 0}; tarArr = arrayB; } public static void ChangeArrayTwo(int[] tarArr) { int[] arrayC = {0, 0, 0, 0, 0, 0}; for(int i = 0; i < arrayC.length; i++) { tarArr[i] = arrayC[i]; } } }
运行结果为
ChangeArrayOne方法没有对arrayA造成影响,ChangeArrayTwo方法对arrayA造成影响。
引用对象的拷贝 !
没想通这句请看下面的代码:
public class ArrayTest { public static void main(String[] args) { //ArrayTest test = new ArrayTest(); int[] arrayA = {1, 1, 1, 1, 1, 1}; ChangeArrayOne(arrayA); for(int i = 0; i < arrayA.length; i++) { System.out.print(arrayA[i]); } System.out.println(""); ChangeArrayTwo(arrayA); for(int i = 0; i < arrayA.length; i++) { System.out.print(arrayA[i]); } } public static void ChangeArrayOne(int[] tarArr) { int[] arrayB = {0, 0, 0, 0, 0, 0}; int[] arrayX = {3, 3, 3, 3, 3, 3}; arrayX = tarArr; for(int i = 0; i < arrayX.length; i++) { System.out.print("arrayX[" + i + "]:" + arrayX[i] + " "); } System.out.println(""); tarArr = arrayB; for(int i = 0; i < tarArr.length; i++) { System.out.print("tarArr[" + i + "]:" + tarArr[i] + " "); } System.out.println(""); for(int i = 0; i < arrayX.length; i++) { System.out.print("arrayX[" + i + "]:" + arrayX[i] + " "); } System.out.println(""); } public static void ChangeArrayTwo(int[] tarArr) { int[] arrayC = {0, 0, 0, 0, 0, 0}; for(int i = 0; i < arrayC.length; i++) { tarArr[i] = arrayC[i]; } } }
运行结果是:
很明显,即使是在方法ChangeArrayOne改变tarArr的时候,arrayA仍然没变,这点由arrayX可知。
tarArr最开始得到指向和arrayA一样的首地址,但是之后由于tarArr = arrayB,tarArr指向了arrayB一样的首地址,而arrayA和得到tarArr未改变之前赋值的arrayX所指向的依然是最初那个首地址。
相关文章推荐
- Java中long类型直接赋值出现The literal xxxxxxxxxx of type int is out of range 问题的原因和解决方法
- android中遇到java.lang.NumberFormatException: unable to parse 'null' as integer此类问题的原因及解决方法
- [Android] "Failed to find Java version for 'C:\Windows\system32\java.exe"问题的解决方法
- Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句'' ""作用
- 关于"错误: 找不到 'Msgbus.api.MsgBusAPI.java' 的类文件。"错误解决方法
- The reference to entity "password" must end with the ';' delimiter.的原因跟解决方法
- The reference to entity "password" must end with the ';' delimiter.的原因跟解决方法
- "Invalid file name: must contain only [a-z0-9_.]"android项目中R.java文件丢失原因及解决方法.
- Java中"Test(Object...args){}"方法声明的理解——J2SE5的“Vararg
- Oracle10g 报错'java.lang.Exception: No such metric'的解决方法
- ASP.NET中使用 Response.Write("<script>alert('****');</script>");后CSS界面发生变化的解决方法 (经验证)
- java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect
- CentOS6.5系统"libc.so.6: version 'GLIBC_2.15' not found"解决方法
- Oracle10g 报错'java.lang.Exception: No such metric'的解决方法
- 关于java'反射机制,获得类的所有方法与字段
- java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date 解决方法
- 数组控制me("crlName")的调用方法
- zenmap: couldn't load font "宋体 Not-Rotated 10"错误解决方法
- pb9.0 编绎成DLL类型时,提示"Error opening file 'c:/windows/system32/cgen/ent32.h" 问题的解决方法
- "此页的状态信息无效,可能已损坏"的原因和解决方法