0 0

一个java问题,求解惑5

public class Arraytest
{
        public static void main( String[] args)
        {
                String[] str1 = new String[3];
                str1[0] = new String("tian");
                str1[1] = new String("kong");
                str1[2] = new String("nan");

                String[] str2 = new String[3];
                System.arraycopy( str1, 0, str2, 0, str1.length);               
               
                str2[2] = "fengyun";  //这一行
                System.out.println(str1[2]);
                System.out.println(str2[2]);
        }
}

刚学java, 学到了数组
这个程序我是这样理解的, 见图






那么我觉得复制了之后str1[2]和str2[2]应该指向同一个位子nan那里呀,
为什么改变了 str2[2]的值,str1[1]的值没有变呢 ,求帮忙解解惑,
2013年5月03日 21:23
  • 大小: 13.7 KB

3个答案 按时间排序 按投票排序

0 0

采纳的答案

[size=xx-large][size=x-large][size=large][size=medium]arraycopy是对数组进行浅拷贝,因此str2拷过去的是str1里面的引用,但是当给str2[2]赋值时,那时候str2[2]里面的引用改变了,然而str1[2]的引用依然是之前copy过去的引用。[/size][/size][/size][/size]

2013年5月04日 09:56
0 0

引用
复制了之后,str1[2]和str2[2]指向同一个引用


不是指向同个引用,是两个引用指向同个String。

str2[2] = "fengyun";

这句,只是把str2中引用指向了新的String。所以str1的没有变化。

2013年5月04日 10:46
0 0

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

你的代码
System.arraycopy( str1, 0, str2, 0, str1.length);    
是把str1[] 从0开始复制到str2[]0结束

str2[2]的值改变了是因为:str2[2] = "fengyun";        

str1[1]没有任何操作,是不会变的

2013年5月04日 00:32

相关推荐

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    Java解惑(中文版)_java_java解惑_solve65p_

    《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    java解惑 PDF版

    综上所述,文档《java解惑 PDF版》的这部分内容涵盖了在Java中处理取余、奇偶判断和浮点数精度问题时需要考虑的诸多细节。开发者在进行编程时应当特别注意这些细节,避免走入常见的陷阱。在处理涉及精度的计算时,...

    JAVA面试题解惑系列合集

    《JAVA面试题解惑系列合集》这篇文章详细地讨论了Java面试中常见的一些知识点和问题。它包括了从类的初始化顺序、String对象的创建数量、变量的覆盖、final关键字、传值和传引用的区别、字符串的处理、日期和时间的...

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    java疑难问题解惑

    例如,一个byte和一个int相加,byte会被提升为int后再做加法运算。 了解并掌握这些Java编程中的疑难问题,对于编写高效、可靠的代码至关重要。深入理解这些基础知识,可以帮助开发者避免潜在的陷阱,提高代码质量,...

    Java解惑.pdf

    这份“Java解惑.pdf”文档很可能包含了解决Java开发者在编程过程中遇到的常见问题和困惑的详细解答。以下是可能涵盖的一些Java相关知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制...

    java疑难解惑(提高篇)

    Java编程语言中的“疑难解惑”常常涉及到对语言特性的深入理解,特别是在处理特定问题时。本篇文章将探讨两个常见的Java谜题,涉及取余运算符 `%` 和浮点数精度问题。 首先,我们来看“表达式谜题”。在Java中,`...

    JAVA解惑.pdf

    《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...

    臧圩人--JAVA面试题解惑系列合集.pdf

    ### JAVA面试题解惑系列知识点概览...整体来看,臧圩人的《JAVA面试题解惑系列合集》覆盖了Java语言的多个核心领域,从基础知识到高级特性,旨在全方位提升Java初学者的技能水平,使其在面试和实际项目中更加游刃有余。

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    java解惑java解惑java解惑

    "Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...

    Java面试解惑宝典(高清PDF版)

    例如,深入理解类与对象的关系,掌握集合框架的层次结构和常用数据结构的实现原理,以及对线程同步机制的理解,都是评估一个Java程序员能力的重要标准。 其次,《Java面试题解惑系列》可能包含了大量的面试真题解析...

    JAVA面试题解惑系列.rar

    这个压缩包可能包含了两本书籍,一本是"JAVA面试题解惑系列.pdf",另一本是"臧圩人--JAVA面试题解惑系列合集.pdf"。这些资源旨在帮助求职者准备Java开发相关的面试,提升他们对Java技术的理解和应用能力。 在Java...

    "java解惑" PDF版本

    "java解惑" PDF版本

    4,JAVA解惑 高清PDF 下载

    同时,附带的"Java学习者论坛提供 www.javaxxz.com.txt"文件,可能指向一个在线社区,提供更多的学习资源和讨论平台,帮助读者在实践中不断成长。 总之,《JAVA解惑》是一本涵盖了Java核心知识点、实战技巧和高级...

Global site tag (gtag.js) - Google Analytics