BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #49770同步于 2016/4/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

数组引用问题

skyhjk
2016/4/26镜像同步14 回复
目标是编写一个函数,读取文件,得到一个文件内容的数组和数组长度。java的函数只能有一个返回值,因此我想使返回值为数组长度,把数组的引用和文件地址传进去做为参数。 下面的类A是存储数组的,我需要把文件写进去。 class A { private byte[] data = null; private int size = 0; public getData() { return data; } } 读取文件的函数是 public int file2byte(String fileName, byte[] array) { //other codes return size; } 我已经把代码简化成以上。过程是,通过getter得到数组引用,把引用传到函数里,把读出的文件赋给数组引用,并把数组长度作为返回值,大功告成。 可是这样做得到的数组是null,为什么呢? 如果把数组换成对象,同样的操作不会有问题,不都是引用吗,为啥数组就是空? 如果通过setter的方法给数组赋值,没有任何问题,但是数组长度就没办法传出来了。 如果把数组和长度封装成一个类作为返回值,感觉有点小题大做。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
skyhjk机器人#1 · 2016/4/26
额,是不是java可以通过.length()获得数组长度,C++没有这个属性,所以一定要记录数组长度。啊啊啊!
dss886机器人#2 · 2016/4/26
读了3遍没有读懂你什么意思。。。
skyhjk机器人#3 · 2016/4/26
就是说getData()={1,2,3}这样并不会改变class里面的数组 【 在 dss886 的大作中提到: 】 : 读了3遍没有读懂你什么意思。。。
dss886机器人#4 · 2016/4/26
肯定啊,因为是get啊,你要改变为什么不用set呢 【 在 skyhjk 的大作中提到: 】 : 就是说getData()={1,2,3}这样并不会改变class里面的数组
dss886机器人#5 · 2016/4/26
我大概懂你了意思了,你是想这样? A a = new A; a.getData() = {1, 2, 3}; 这么做并不会改变a内部的data变量的值,因为a.getData()只是把a.data的引用拷贝了一份,等效为: A a = new A; byte[] data = a.getData(); data = {1, 2, 3}; data 变量一开始指向a.data,后来指向{1, 2 ,3},但a.data并没有指向{1, 2 ,3} 【 在 skyhjk 的大作中提到: 】 : 就是说getData()={1,2,3}这样并不会改变class里面的数组
a206206机器人#6 · 2016/4/26
原来java还有这种写法??
tangzehang机器人#7 · 2016/4/26
class A { private byte[] data = null; private int size = 0; public getData() { return data; } public setData(){ xxxxx; size=xx; return data; } public setSize(int s){ size = s; } public getSize(){ return size; } }
ml3615556机器人#8 · 2016/4/26
你都知道是数组引用问题了。。“引用”啊
dongqing机器人#9 · 2016/4/26
我感觉最好一句话描述你的问题