今天又是匆匆忙忙的一天,老样子,上午依旧是在写代码。下午写了一个小时,就和项目组的去讨论项目了。因为明天是freetime,所以本来明天的蓝球赛,移到今天了,但是因为我们讨论的时间太长了,上半场结束了我们才到操场,队友说对手超我们一半的分数。感觉有点愧对Fe战队,下半场尽力去往回拉分,但是拉到还有3分差的时候,比赛结束,虽然有点遗憾,但是努力拼搏的感觉,挺好。
晚上是算法时间,在写算法期间喷到一个有意思的问题,如下所示。
double[] aa=new double[3] ;
double[] bb=new double[3] ;
bb = aa;
a[0] = 7.7
先把往下看,思考一下目前aa和bb分别是什么?

答案是: aa:[7.7, 0.0, 0.0] , bb[7.7, 0.0, 0.0]
经过我自己测试,修改这两个数组中任意一个,另一个都会相应改变,很神奇对不,后来查了一些资料,解释如下。
数组在内存中的存储方式:
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。
实际的数组元素被存储在堆(heap)内存中;数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中。

看到这里应该就明白了吧,其实这些东西在学第一们编程语言的时候就应该讲过 ,但是一直当成概念来记了,真正碰到问题时却想不到原因所在。
所以说我们在程序开发时,不要仅仅停留在代码表面,而要深入底层的运行机制,才可以对程序的运行机制有更准确的把握。
网友评论