假设我有一个类似对象的数组。为了方便,想想Integer吧。但实际上,它可能是一些虚构的数据类型,如汽车或其他东西。再说一遍,我要找到那个极端。换指数便宜吗?那些东西?还是没什么关系?换句话说,示例A或示例B更便宜
示例A
int least = 0;
for(int i=1; i<objects.length;i++)
if(objects[i].isLessThan(objects[least)) least= i;示例B
Stuff least = objects[0];
for(int i=1; i<objects.length;i++)
if(objects[i].isLessThan(objects[least)) least= objects[i];发布于 2015-05-11 02:29:10
应该是一样的。如果您没有首先访问objects[i]来执行比较,那么由于CPU缓存之外的内存访问而引入的延迟可能是一个问题,但是由于您已经访问了objects[i],这不太可能是一个问题。
在非常大的数组(大于缓存的页面大小)中,交换对象可能会更快,因为不需要为每个比较检索objects[least],但这是猜测。
发布于 2015-05-11 02:28:20
在Java中,每个变量要么是原始变量,要么是引用类型( Car类型的变量只包含对Car实例的引用)。也就是说,所有变量最多都是64位大的,并且可以在一个cpu指令中分配。长话短说:没关系。
发布于 2015-05-11 02:34:23
java中的引用是32位机器上的32位或64位机器上的64位,如果要复制对象,它就是要复制的引用。
一个原始的,另一方面,取决于哪种。例如,一个字节是8位,整数为32。,所以复制一个整数与指针的复制时间一样多(或者在64位机器上复制的时间是它的一半)。
最后,这并不重要,因为您只是在复制引用,而不是指向的数据。
https://stackoverflow.com/questions/30158790
复制相似问题