java中的基础数据类型长度是否取决于操作系统?
在一些语言中,数据类型的长度是和操作系统有关系的,比如c和c++;
但是在java中,java的基础类型长度都是固定的,都是4个字节。
因为java不是直接运行在本地操作系统上的,而是运行在JVM上的,JVMJ保证class文件在不同的操作系统上稳定;这也是java跨平台的一点。
首先查看我的java version:
发现以及是server版的了,是混合模式(关于混合模式理解,可以查看):
Integer默认的是[-128, 127]的缓存范围,之前我们查看源码的时候也发现了,其中的low的下限是最开始的时候就固定死了的 final int low = -128;而其中的high虽然是设置了final int的,但是最初的时候,是还没有赋值的;所以我们可以通过设置java 的时候的参数来配置运行时的参数:
java -D java.lang.Integer.IntegerCache.high=1000 TestAutoBoxCache
java -XX:AutoBoxCacheMax=1000 TestAutoBoxCache
其中都可以跟上 -server参数,也可以不跟!(因为我默认的是server版的jdk)
其中我的测试代码:
/**
* 测试Integer的缓存上限修改:
* (不过请注意:一旦你修改了缓存上限,都存到了常量池中,加大了内存的负担)
* gc是没有办法回收的!!AutoBoxCacheMax
*
* @author mzy
*
*/
public class TestAutoBoxCache {
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
Integer c = 128;
Integer d = 128;
System.out.println(c == d);
Integer e = 1000;
Integer f = 1000;
System.out.println(e == f);
Integer g = 1001;
Integer h = 1001;
System.out.println(g == h);
Integer i = 20000;
Integer j = 20000;
System.out.println(i == j);
}
}
运行结果,运行测试,(以下是在命令行中测试,也可以在IDE中进行,如eclipse中配置run as->run congratulations->arguments):
运行上面的代码,参数不同,结果不同:
参考,感谢!
http://rednaxelafx.iteye.com/blog/680746
http://www.iteye.com/topic/857587
https://blog.csdn.net/wang0112233/article/details/78641951