java 基本数据类型和其封装类你知多少?
2016-08-19 10:35
357 查看
/** * 基本数据类型和其封装类你知多少? * 一次调试bug让我发现这其中暗藏玄机。 * 故研究了一下:如果有不对的地方希望指教。 */ System.out.println("----------- double / vs / Double 比较 ----------------"); double z = 1; Double zz = (double) 1; //与zzz只是写法不同 编译过程和结果是一样的 Double zzz = 1D; Double zzzz = new Double(1); System.out.println(z == 1); // true System.out.println(zzz == 1); // true System.out.println(zzzz == 1); // true System.out.println(zz == z); // true System.out.println(zz == zzz); // false System.out.println(zz == zzzz); // false System.out.println(zzz == zzzz); // false System.out.println(zz.doubleValue() == zzz);// ture System.out.println(zzzz.doubleValue() == zzz);// ture /** * 小结: * 封装类对象 跟数值或基本类型比较时:会自动拆箱,比较的是值! * 封装类对象 跟封装类对象比较时:比较的是内存地址! */ System.out.println("----------- long / vs / Long -127~127 比较----------------"); long l = 127; Long ll = 127L;//与lll只是写法不同 编译过程和结果是一样的 Long lll = (long)127; Long llll = new Long(127); System.out.println(l==ll);// ture System.out.println(l==lll);// ture System.out.println(l==llll);// ture System.out.println(ll==lll);// ture System.out.println(ll==llll);// false System.out.println(ll.longValue()==llll.longValue());// ture System.out.println("----------- long / vs / Long !(-127~127) 比较----------------"); long c = 128; Long cc = 128L; Long ccc = (long)128; Long cccc = new Long(128); System.out.println(c==cc);// ture System.out.println(c==ccc);// ture System.out.println(c==cccc);// ture System.out.println(cc==ccc);// false System.out.println(cc==cccc);// false System.out.println(cc.longValue()==cccc.longValue());// ture /** * 小结: * 基本同double/Double类似: * 不同地方在于:jvm会将-127~127的数字存在缓存中 * 当Long lll = (long)127;jvm实际执行的是 Long.valueOf(127);直接从缓存中获取 * 而Long ccc = (long)128;jvm实际执行的是 new Long(128); * * (int 和 Integer) 比较完全与(long和Long比较)采取的机制相同 */ System.out.println("----------- int / vs / Integer 循环 ----------------"); Long intStart = System.currentTimeMillis(); int x = 0; for (int i = 0; i < 50000; i++) { x++; } System.out.println(System.currentTimeMillis()-intStart);// 1 Long integerStart = System.currentTimeMillis(); int y = 0; for (Integer i = 0; i < 50000; i++) { y++; } System.out.println(System.currentTimeMillis()-integerStart);// 6 System.out.println("--------"); Integer v = 1; System.out.println(v.hashCode());// 1 v ++; System.out.println(v.hashCode());// 2 Integer vv = new Integer(1); System.out.println(vv.hashCode());// 1 vv ++; System.out.println(vv.hashCode());// 2 /** * 小结: * Integer类似String一样重新赋值时需要重新开辟内存空间 * Double Long 等同 * 由于int double long 为基本数据类型 没相关查看内存地址变化的方法 * 不过从上面两个循环就可以看出差别 */ String str = ""; System.out.println(str.hashCode());//0 str = "ss"; System.out.println(str.hashCode());//3680 StringBuilder sbuilder = new StringBuilder(); System.out.println(sbuilder.hashCode());//33263331 sbuilder.append("ss"); System.out.println(sbuilder.hashCode());//33263331
</pre><pre code_snippet_id="1839669" snippet_file_name="blog_20160819_1_8315089" name="code" class="java"><pre name="code" class="java"> //比较大小时候 Long l = 128L; Long ll = 121L; Long lll = 128L; System.out.println(l==ll);// false System.out.println(l.equals(lll));// true System.out.println(l.compareTo(ll));// 1 System.out.println(l.compareTo(lll));// 0 System.out.println(ll.compareTo(l));// -1
相关文章推荐
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
- java 中类的Class实例的获取和每个 基本数据类型的封装类 暑假第十天
- JAVA9种基本数据类型的大小,以及他们的封装类
- java基本数据类型和其封装类
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
- java 基本数据类型跟封装类型的差距
- JAVA中基本数据类型和封装类的区别Integer和Double为例
- Java中基本类型和封装类型数据与堆、栈的关系
- java八种基本数据类型的大小,以及他们的封装类
- java中的基本数据类型与封装类
- java 中类的Class实例的获取和每个 基本数据类型的封装类 暑假第十天
- 关于java基础--基本数据类型封装以及String类方法讲解
- java基本数据类型、对应的封装类以及字符串之间的相互转换
- java基本数据类型与封装类型详解(int和Integer区别)
- java基本数据类型与封装类型详解(int和Integer区别)
- Java中九种基本数据类型以及他们的封装类
- java基本数据类型封装类(Integer类)
- java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- java基本数据类型与封装类型详解(int和Integer区别)
- Java8种基本数据类型的封装,Cache