首页 > 试题广场 >

计算新语言的对象个数。

[填空题]
为了某项目需要,我们准备构造了一种面向对象的脚本语言,例如,对所有的整数,我们都通过Integer类型的对象来描述。在计算“1+2”时,这里的“1”,“2”和结果“3”分别为一个Integer对象。为了降低设计复杂度,我们决定让Integer对象都是只读对象,也即在计算a=a+b后,对象a引用的是一个新的对象,而非改a所指对象的值。考虑到性能问题,我们又引入两种优化方案:
(1)对于数值相等的Integer对象,我们不会重复创建。例如,计算“1+1”,这里两个“1”的引用的是同一个对象;
(2)脚本语言解析器启动时,默认创建数值范围[1,32]的32个Integer对象。现在,假设我们要计算表达式“1+2+3+…+40”,在计算过程需要新创建的Integer对象个数是1个? 
推荐
答案:40

这根java类似,java中-128到127都是单引用的,下面说解法:

在这些数字相加是,33-40每个数字都需要创建一个对象,共40-33+1=8个对象
1+2+3+4+5+6+7=28,这里不会创建新对象,因为解析器启东时已经创建
28+8=36,这里‘36’的引用对象在上面数字的相加的因子中已经创建,不会再重复创建
36+9=45,这里创建一个‘45’的引用对象,
也就是从9开始,以后每加一个数字都会创建一个对象,需要创建40-9+1==32个对象。
总的需要8+32个对象

编辑于 2015-06-05 15:40:22 回复(4)
33~40 共8个
45~820 共33个

一共40个


编辑于 2015-06-05 11:09:04 回复(2)
新建一个integer对象41.然后调整相加顺序,1+40、2+39......20+21
发表于 2015-06-05 19:16:44 回复(0)
新增加一个41对象,然后调整顺序41×20 ,然后会不会进行归并这样优化,创建82 164 ...对象呢
发表于 2018-02-17 12:46:58 回复(0)
17个。+操作读是双目操作读,从左到右。因为值为1到32的整型对象解析器自动创建,因此1+2+3+....32只生成一个对象用来存放值,接下来创建一个对象存放33,存放33的对象和第一个对象相加又生成一个对象,接着创建一个对象存放34。。。如此递归下去,直到+40,对象创建次数==1+2✘8==17.如果每个int对象占4字节,将会占用68字节内存空间
发表于 2015-07-11 05:00:50 回复(1)
对象个数是 1 个,因为Integer的值可以在编译时就确定下来,JVM会在编译时就计算出Integer的值,然后将值放入到堆内存中,并让对象指向它。
发表于 2015-06-10 13:37:07 回复(0)
2个:1+2+3+...+40=41*20=(20+21)*20,所以只需要两个整形对象存储20和21即可
发表于 2015-06-05 22:14:08 回复(1)
我怎么算的是71个呢
发表于 2015-06-05 17:14:34 回复(0)
40
发表于 2015-06-05 17:01:38 回复(0)
要仔细数数,40
发表于 2015-06-05 14:20:51 回复(0)
40
发表于 2015-06-05 13:54:32 回复(0)
40
发表于 2015-06-05 11:57:09 回复(0)
40
发表于 2015-06-05 11:52:52 回复(0)
1
发表于 2015-06-05 10:36:02 回复(0)
C
发表于 2015-04-24 16:16:58 回复(0)
楼下正解
发表于 2015-03-26 16:52:31 回复(0)