为了搞清楚String a = "wenqiao"; 和 String a = new String("wenqiao");的区别
做了小实验
实验猜想:第一种方法 字符串存储在常量池中,且常量池中只会有一个"wenqiao";第二种方法 字符串存放在堆中 且每个"wenqiao"都是不一样的对象
实验结果:
第二种方法速度明显慢于第一种,当运行次数达到一定次数后,堆内存溢出,符合实验期望。
但是..温乔一开始实验时结果并不是这样…而是
情况一:
时间明显较短,甚至还有这样的情况
情况二:
情况三:
出现这些情况的表面原因:
情况一:
for(int i=0;i<1000000000;i++){
String a1 = "wenqiao";
}
for(int i=0;i<1000000000;i++){
String a2 = new String("wenqiao");
}
最上面截图的代码中,在for循环外定义了很长的字符串数组用于存放每个字符串,而这三个都是for循环内部定义了局部变量。原因猜想: ①不明白为什么时间明显缩短??希望有大神指导 ②堆内存没有溢出:局部变量a1被存放在栈中,每次循环结束后,该引用生命到期,对应在堆内的字符串成为垃圾被回收
情况二:
for(long i=0;i<1000000000;i++){
String a1 = "wenqiao";
}
for(int i=0;i<1000000000;i++){
String a2 = new String("wenqiao");
}
情况三:
for(long i=0;i<1000000000;i++){
String a1 = "wenqiao";
}
for(long i=0;i<1000000000;i++){
String a2 = new String("wenqiao");
}
这两种情况显示:当i为long型基本变量时,代码执行时间比int要久很多
原因猜想:
对long型变量进行操作时耗时比int久
实验:
代码:
long i;
for(i = 0 ;i < 1000000000;i++){
}
int j;
for(j = 0 ;j < 1000000000;j++){
}
结果
猜想:是因为long型数据大小为8bytes,而int为4bytes,其操作时对long型数据的计算更为复杂,所以用时更久,目前没有更深的学习和了解!
欢迎各位大神评价和指导!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。