一个java问题,求解惑

问题描述

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]的值没有变呢 ,求帮忙解解惑,

解决方案

[size=xx-large][size=x-large][size=large][size=medium]arraycopy是对数组进行浅拷贝,因此str2拷过去的是str1里面的引用,但是当给str2[2]赋值时,那时候str2[2]里面的引用改变了,然而str1[2]的引用依然是之前copy过去的引用。[/size][/size][/size][/size]
解决方案二:
引用复制了之后,str1[2]和str2[2]指向同一个引用不是指向同个引用,是两个引用指向同个String。str2[2] = "fengyun"; 这句,只是把str2中引用指向了新的String。所以str1的没有变化。
解决方案三:
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]没有任何操作,是不会变的

时间: 2024-11-05 12:13:09

一个java问题,求解惑的相关文章

java 串口-代码,运行结果如下,为什么结果会重复5次,java新手求解惑

问题描述 代码,运行结果如下,为什么结果会重复5次,java新手求解惑 int x=0; Enumeration portList1 = CommPortIdentifier.getPortIdentifiers(); while (portList1.hasMoreElements()) { x++; test_buffer[x]=((CommPortIdentifier) portList1.nextElement()).getName(); System.out.println("第&qu

源码-JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑

问题描述 JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑 JDK1.7重新设计了String类,各个String对象各自维护一个属于自身的char数组,下面是该类中的toCharArray方法的实现源码:public char[] toCharArray() { // Cannot use Arrays.copyOf because of class initialization order issues char

日历-求帮写一个java小程序

问题描述 求帮写一个java小程序 读取txt文件,文件中有一个8位的日期(任意),读出并打印此日期开始的一个月日历 解决方案 String s="20160221"; SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); try { Date startDate=sdf.parse(s); Calendar c2=Calendar.getInstance(); Calendar c=Calendar.getI

效果-求一个java 类型的 双直立插值算法放缩处理图片代码?

问题描述 求一个java 类型的 双直立插值算法放缩处理图片代码? 网上很多代码调用之后生成的图片 不是黑色的 就是放大后没什么效果 解决方案 有没有人知道啊 怎么解决

但没有用remove函数-编写了一个Java循环报数的问题,应该是哪里卡住了过不去,求大神指点

问题描述 编写了一个Java循环报数的问题,应该是哪里卡住了过不去,求大神指点 public class Jump {/*1-100号人循环报数,报到7的倍数的输出,第一轮输出714,...98第二轮99报1输出513....不管是第几轮,输出完50个数结束.*/ public static void main(String[] args) { int arr_all[] = new int[101]; int m = 1; int i = 1; int out = 0; int count =

我是一个JAVA写程序员,配置一台笔记本电脑,求建议

问题描述 我是一个JAVA写程序员,配置一台笔记本电脑,求建议 我是一个JAVA写程序员,配置一台笔记本电脑,求建议.具体什么牌子型号现在买了一台THINKPAD E565是A核A卡,感觉被坑了.想换一台. 解决方案 感觉坑,就自己组装一台~ 解决方案二: 我用的是Y480 配置刚刚的 解决方案三: 我用的华硕,I7处理器.4k多点.用起来很流畅. 解决方案四: 处理器I7吧,运行内存可以买个4G的,然后买个4G的内存条按上.绝对很流畅

按钮-自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙!

问题描述 自己参照书本写了一个Java Swing中的容器类入门程序设计,但是运行结果不对,求大神帮帮忙! /*题目是这样的:创建一个窗体在其中摆放两个内容面板对两个面板进行边框个性化设置.初始状态为第二个面板不可见,当单击第一个面板中的"打开"按钮时,第二个面板即可见:当单击第一个面板中的"关闭"按钮时,第二个面板消失. 以下是我结合书本写的代码,不知道为什么运行不了???*/import javax.swing.*;import java.awt.*;impor

求一个java的人脸识别系统源码

问题描述 求一个java的人脸识别系统源码 用java语言开发,可以进行人脸识别的程序,算法不要太复杂,能进行简单的人脸识别就行了 解决方案 求人脸识别系统源代码!!! 解决方案二: 一个完整的项目demo http://download.csdn.net/detail/apbbbbb/9525308

java关于PrintWriter调用write方法之后使用flush方法获取不到内容原因探究求解惑!

问题描述 java关于PrintWriter调用write方法之后使用flush方法获取不到内容原因探究求解惑! PrintWriter ps= new PrintWriter(socket.getOutputStream()); ps.write( "hello" ); ps.flush(); 服务端获取不到hello信息,看了下PrintWriter源码,flush()中调用的是BufferedWriter中的flush(),如果这样的话,应该能刷新缓冲得到结果.但是没有...网上

新手求解答一下-关于一个JAVA初级问题。我是新手啊。求大神给代码

问题描述 关于一个JAVA初级问题.我是新手啊.求大神给代码 1:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌.用程序模拟这一过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并打印输出互换后的结果. 输出互换前手中的纸牌: 左手中的纸牌: 10 右手中的纸牌: 8 输出互换后手中的纸牌: 左手中的纸牌: 8 右手中的纸牌: 10 解决方案 int a; int leftHand = 10; int rightHand = 8; a = leftHand; leftHan