为了搞清楚String a = "wenqiao"; 和 String a = new String("wenqiao");的区别
作了小实验
实验猜测:第一种方法 字符串存储在常量池中,且常量池中只会有一个"wenqiao";第二种方法 字符串存放在堆中 且每一个"wenqiao"都是不同的对象
实验结果:数组
第二种方法速度明显慢于第一种,当运行次数达到必定次数后,堆内存溢出,符合实验指望。学习
可是..温乔一开始实验时结果并非这样…而是spa
状况一:code
时间明显较短,甚至还有这样的状况对象
状况二:blog
状况三:图片
出现这些状况的表面缘由:
状况一:内存
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被存放在栈中,每次循环结束后,该引用生命到期,对应在堆内的字符串成为垃圾被回收字符串
状况二:it
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型数据的计算更为复杂,因此用时更久,目前没有更深的学习和了解!
欢迎各位大神评价和指导!