- 浏览: 308391 次
- 性别:
- 来自: 武汉
最新评论
-
r463579217:
给一下代码demo呀
Java多线程总结之聊一聊Queue -
水土第一:
LZ 中间文章里面可能有单词拼写错误,小弟补一下。。。
pa ...
Java多线程总结之由synchronized说开去 -
xy_z487:
>> 回调函数:A调用B,同时传A给B。B执行完会 ...
深入浅出Java回调机制 -
xuxiaoyinliu:
THANKS 第一次遇到这种错误,原来是这样
String的valueOf方法传入null -
sinat_25176913:
赞赞赞,一直还在想为什么得到的是一个"null&qu ...
String的valueOf方法传入null
简单来说:装箱就是把值类型转变为引用类型,拆箱就是把引用类型转变为值类型
其实这东西没什么好说的,上代码看看就明白了:
运行结果:
小结:
可见,Integer缓存中有一个静态的Integer数组,在类加载时就将-128 到 127 的Integer对象创建了,并保存在cache数组中,一旦程序调用valueOf 方法,如果i的值是在-128 到 127 之间就直接在cache缓存数组中去取Integer对象。
其实这东西没什么好说的,上代码看看就明白了:
/** * @author hellosure * @time 2011-7-27 上午8:10:46 * @description:装箱拆箱例子 */ public class Test { public static void main(String arg[]) { int v1 = 100; int v2 = 100; //自动装箱 Integer autovalue1 = 100 ; Integer autovalue2 = 100 ; //手动装箱两种方式 Integer value1 = Integer.valueOf(v1); Integer value2 = Integer.valueOf(v2); Integer va1 = new Integer(v1); Integer va2 = new Integer(v2); //自动拆箱 int autov1 = autovalue1; int autov2 = autovalue2; //手动拆箱 int vv1 = value1.intValue(); int vv2 = value2.intValue(); System.out.println(" v1 == v2 is "+ (v1 == v2)); System.out.println(" autovalue1 == autovalue2 is "+ (autovalue1 == autovalue2)); System.out.println(" value1 == value2 is " + (value1 == value2)); System.out.println(" va1 == va2 is "+ (va1 == va2)); System.out.println(" va1 equals va2 is "+ (va1.equals(va2))); System.out.println(" autov1 == autov2 is "+ (autov1 == autov2)); System.out.println(" vv1 == vv2 is "+ (vv1 == vv2)); System.out.println("-----------------------------------------------------"); String strv1 = "100"; String strv2 = "100"; String stringv1 = new String("100"); String stringv2 = new String("100"); Integer strvalue1 = Integer.parseInt(strv1); Integer strvalue2 = Integer.parseInt(strv2); Integer stringvalue1 = Integer.parseInt(stringv1); Integer stringvalue2 = Integer.parseInt(stringv2); Integer newstrv1 = new Integer(strv1); Integer newstrv2 = new Integer(strv2); System.out.println(" strv1 == strv2 is "+ (strv1 == strv2)); System.out.println(" stringv1 == stringv2 is "+ (stringv1 == stringv2)); System.out.println(" stringv1 equals stringv2 is "+ (stringv1.equals(stringv2))); System.out.println(" strvalue1 == strvalue2 is "+ (strvalue1 == strvalue2)); System.out.println(" stringvalue1 == stringvalue2 is "+ (stringvalue1 == stringvalue2)); System.out.println(" newstrv1 == newstrv2 is "+ (newstrv1 == newstrv2)); System.out.println(" newstrv1 equals newstrv2 is "+ (newstrv1.equals(newstrv2))); System.out.println("-----------------------------------------------------"); int v3 = 200; int v4 = 200; //自动装箱 Integer autovalue3 = 200 ; Integer autovalue4 = 200 ; //手动装箱两种方式 Integer value3 = Integer.valueOf(v3); Integer value4 = Integer.valueOf(v4); Integer va3 = new Integer(v3); Integer va4 = new Integer(v4); //自动拆箱 int autov3 = autovalue3; int autov4 = autovalue4; //手动拆箱 int vv3 = value3.intValue(); int vv4 = value4.intValue(); System.out.println(" v3 == v4 is "+ (v3 == v4)); System.out.println(" autovalue3 == autovalue4 is "+ (autovalue3 == autovalue4)); System.out.println(" value3 == value4 is " + (value3 == value4)); System.out.println(" va3 == va4 is "+ (va3 == va4)); System.out.println(" va3 equals va4 is "+ (va3.equals(va4))); System.out.println(" autov3 == autov4 is "+ (autov3 == autov4)); System.out.println(" vv3 == vv4 is "+ (vv3 == vv4)); System.out.println("-----------------------------------------------------"); String strv3 = "200"; String strv4 = "200"; String stringv3 = new String("200"); String stringv4 = new String("200"); Integer strvalue3 = Integer.parseInt(strv3); Integer strvalue4 = Integer.parseInt(strv4); Integer stringvalue3 = Integer.parseInt(stringv3); Integer stringvalue4 = Integer.parseInt(stringv4); Integer newstrv3 = new Integer(strv3); Integer newstrv4 = new Integer(strv4); System.out.println(" strv3 == strv4 is "+ (strv3 == strv4)); System.out.println(" stringv3 == stringv4 is "+ (stringv3 == stringv4)); System.out.println(" stringv3 equals stringv4 is "+ (stringv3.equals(stringv4))); System.out.println(" strvalue3 == strvalue4 is "+ (strvalue3 == strvalue4)); System.out.println(" stringvalue3 == stringvalue4 is "+ (stringvalue3 == stringvalue4)); System.out.println(" newstrv3 == newstrv4 is "+ (newstrv3 == newstrv4)); System.out.println(" newstrv3 equals newstrv4 is "+ (newstrv3.equals(newstrv4))); System.out.println("-----------------------------------------------------"); } }
运行结果:
v1 == v2 is true autovalue1 == autovalue2 is true value1 == value2 is true va1 == va2 is false va1 equals va2 is true autov1 == autov2 is true vv1 == vv2 is true ----------------------------------------------------- strv1 == strv2 is true stringv1 == stringv2 is false stringv1 equals stringv2 is true strvalue1 == strvalue2 is true stringvalue1 == stringvalue2 is true newstrv1 == newstrv2 is false newstrv1 equals newstrv2 is true ----------------------------------------------------- v3 == v4 is true autovalue3 == autovalue4 is false value3 == value4 is false va3 == va4 is false va3 equals va4 is true autov3 == autov4 is true vv3 == vv4 is true ----------------------------------------------------- strv3 == strv4 is true stringv3 == stringv4 is false stringv3 equals stringv4 is true strvalue3 == strvalue4 is false stringvalue3 == stringvalue4 is false newstrv3 == newstrv4 is false newstrv3 equals newstrv4 is true -----------------------------------------------------
小结:
- 对于new创建出的两个对象,用==比较肯定是不同的,因为指向的不是同一内存
- Integer装箱过程中调用的是valueOf方法,而 valueOf方法对值在-128到127之间的数值缓存了,源代码如下:
public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); }
可见,Integer缓存中有一个静态的Integer数组,在类加载时就将-128 到 127 的Integer对象创建了,并保存在cache数组中,一旦程序调用valueOf 方法,如果i的值是在-128 到 127 之间就直接在cache缓存数组中去取Integer对象。
发表评论
-
关于继承的例子
2011-11-19 15:13 1236继承是再普通不过的概念,但是你真的能玩的转吗? 父类Perso ... -
Object类分析equals、hashcode、clone
2011-11-17 21:57 1858Object类中的equals: publ ... -
成员变量的初始化
2011-11-16 16:15 1084Java会对成员变量进行自动初始化,并且在构造方法执行之前完成 ... -
关于java多线程的一篇不错的入门级文章
2011-11-14 22:42 1950虽然都是老生常谈,而且入门级,但是讲的很不错。 一、理解多线 ... -
多线程常用方法比较汇总
2011-11-15 23:07 1603从操作系统的角度讲,o ... -
多线程例子:yield
2011-11-14 20:59 1605public class Test { public ... -
String的valueOf方法传入null
2011-11-12 20:42 13815这个问题很有意思 Object obj = null; ... -
多线程例子:join
2011-11-09 23:06 1376package sure; import java. ... -
多线程例子:wait与notify、sleep
2011-11-09 22:15 3343package sure; import org.s ... -
JAVA编程经验汇总
2011-11-04 21:04 1245都是一些小的点,不完 ... -
以ConcurrentHashMap为例小议并发集合类
2011-08-09 22:15 5106为了引出并发集合类ConcurrentHashMap,有必要先 ... -
聊一下Java代理那点事
2011-08-06 20:08 2017代理模式 代理模式的作用是:为其他对象提供一种代理以控制对 ... -
说说volatile关键字
2011-08-05 16:29 2357Java语言规范中指出:为 ... -
小议时序调度Timer和Quartz
2011-07-28 21:15 7223本文不是用来讲授入门手把手ABC小例子的,算是自己这段时间对T ... -
深入浅出Java回调机制
2011-07-21 21:24 83344前几天看了一下Spring的部分源码,发现回调机制被大量使用, ... -
Java多线程总结之聊一聊Queue
2011-07-17 23:13 36876上个星期总结了一下synchronized相关的知识,这次将Q ... -
Java多线程总结之由synchronized说开去
2011-07-10 17:19 22487更新完毕,结贴,以后有新的想法再开新帖 这几天不断添加新内容, ... -
关于递归
2011-06-18 21:27 109算法中有调用自身,则是递归 递归算法必须是逐步有规律简化的, ... -
java的内部类与匿名类
2011-06-18 13:19 1815提起Java内部类(Inner Class)可能很多人不太熟悉 ... -
Java线程同步机制synchronized关键字的理解
2011-06-18 08:49 37由于同一进程的多个线 ...
相关推荐
3.19 Java包装类、拆箱和装箱详解 54 3.20 包装类的应用 54 3.20.1.1 1) 实现 int 和 Integer 的相互转换 54 3.20.1.2 2) 将字符串转换为整数 55 3.20.1.3 3) 将整数转换为字符串 55 3.21 自动拆箱和装箱 56 3.22 再...
Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...
Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...
10.2一个关于泛型的简单例子305 10.3带两个类型参数的泛型类308 10.4有界类型309 10.5通配符参数311 10.6泛型方法313 10.7泛型接口315 10.8泛型类的继承317 10.8.1以泛型类为父类317 10.8.2以非泛型类为父类...
Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...
1.5.2 自动装箱/拆箱 1.5.3 带有限制的通配符 1.5.4 泛型static方法 1.5.5 类型限界 1.5.6 类型擦除 1.5.7 对于泛型的限制 1.6 函数对象 小结 练习 参考文献 第2章 算法分析 2.1 数学基础 2.2 模型 2.3 要分析的...
java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....
java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....
因为JAVA的自动装箱与拆箱机制,不需要根据场景来区分数据类型。 D .所有的局部变量推荐使用基本数据类型。 多选 12.关于索引的设计,下列哪些说法符合《阿里巴巴Java开发手册》:ACD A .对varchar类型的字段...
2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。关键字 object. 取消装箱是从 object 类型到值...