您的位置:首页 > 编程语言 > Java开发

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



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: