- 浏览: 310840 次
- 性别:
- 来自: 武汉
最新评论
-
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 1273继承是再普通不过的概念,但是你真的能玩的转吗? 父类Perso ... -
Object类分析equals、hashcode、clone
2011-11-17 21:57 1897Object类中的equals: publ ... -
成员变量的初始化
2011-11-16 16:15 1118Java会对成员变量进行自动初始化,并且在构造方法执行之前完成 ... -
关于java多线程的一篇不错的入门级文章
2011-11-14 22:42 2020虽然都是老生常谈,而且入门级,但是讲的很不错。 一、理解多线 ... -
多线程常用方法比较汇总
2011-11-15 23:07 1636从操作系统的角度讲,o ... -
多线程例子:yield
2011-11-14 20:59 1643public class Test { public ... -
String的valueOf方法传入null
2011-11-12 20:42 13931这个问题很有意思 Object obj = null; ... -
多线程例子:join
2011-11-09 23:06 1406package sure; import java. ... -
多线程例子:wait与notify、sleep
2011-11-09 22:15 3379package sure; import org.s ... -
JAVA编程经验汇总
2011-11-04 21:04 1287都是一些小的点,不完 ... -
以ConcurrentHashMap为例小议并发集合类
2011-08-09 22:15 5158为了引出并发集合类ConcurrentHashMap,有必要先 ... -
聊一下Java代理那点事
2011-08-06 20:08 2087代理模式 代理模式的作用是:为其他对象提供一种代理以控制对 ... -
说说volatile关键字
2011-08-05 16:29 2391Java语言规范中指出:为 ... -
小议时序调度Timer和Quartz
2011-07-28 21:15 7265本文不是用来讲授入门手把手ABC小例子的,算是自己这段时间对T ... -
深入浅出Java回调机制
2011-07-21 21:24 83474前几天看了一下Spring的部分源码,发现回调机制被大量使用, ... -
Java多线程总结之聊一聊Queue
2011-07-17 23:13 36975上个星期总结了一下synchronized相关的知识,这次将Q ... -
Java多线程总结之由synchronized说开去
2011-07-10 17:19 22637更新完毕,结贴,以后有新的想法再开新帖 这几天不断添加新内容, ... -
关于递归
2011-06-18 21:27 109算法中有调用自身,则是递归 递归算法必须是逐步有规律简化的, ... -
java的内部类与匿名类
2011-06-18 13:19 1886提起Java内部类(Inner Class)可能很多人不太熟悉 ... -
Java线程同步机制synchronized关键字的理解
2011-06-18 08:49 37由于同一进程的多个线 ...
相关推荐
在Java中,自动装箱是指将基本数据类型自动转换为对应的包装类对象的过程,而自动拆箱则是指将包装类对象自动转换为基本数据类型的逆过程。这一特性自Java 5起引入,极大地简化了开发者的编程工作。 #### 基本数据...
以下是关于Java包装类的详细知识: 1. **包装类的定义与作用** - Java的8个基本数据类型包括byte、short、int、long、char、float、double和boolean。每个都有其对应的包装类,分别是Byte、Short、Integer、Long、...
在JDK 5.0之后,Java引入了自动装箱和拆箱机制,使得开发者能够更便捷地处理基本类型和它们对应的包装类。例如: ```java // 装箱 Integer a = new Integer(1); // 拆箱 int b = a.intValue(); ``` 在早期版本中,...
Java中的拆装箱是面向对象编程中的一种特性,主要用于基本数据类型与其对应的包装类之间的转换。在Java中,为了支持基本数据类型在集合、泛型等高级特性中的使用,引入了包装类,如Integer、Double等。这些包装类的...
拆箱则是将包装类对象转换回基本数据类型,如将Integer对象拆箱为int类型的值。JDK 1.5版本后,Java支持自动装箱和拆箱,简化了程序中对这两种操作的编码工作。 Java中的对象“相等”比较主要通过两种方式实现:...
8. 自动装箱拆箱:这是Java 5.0的另一个新特性,简化了基本类型与对应的包装类之间的转换,提高了代码的可读性和简洁性。 9. 可变参数:可变参数是Java 5.0引入的,允许方法接受不定数量的参数,使函数调用更加灵活...
自动装箱允许在基本类型和对应的包装器类型之间进行无缝转换,减少了手动转换的代码。例如,`Integer i = 10;` 和 `int j = i;` 这样的操作在Java 5.0中变得非常方便。 4. **变长参数(Varargs)** 变长参数允许...
Java支持自动装箱和拆箱,这是一种语法糖,允许程序员在基本数据类型和其对应的包装类之间自动转换。例如,`Integer i = 10;`是自动装箱的例子,而`int j = i;`则是自动拆箱的例子。需要注意的是,这种便利性也可能...
3. **自动装箱与拆箱**:Java 1.5 开始支持自动装箱和拆箱,简化了原始类型和其对应的包装类之间的转换。例如,`Integer` 自动转换为 `int`。 4. **匿名内部类**:Java 允许创建没有名称的内部类,通常用于实现接口...
- **自动装箱与拆箱**:从Java 5开始,Java引入了自动装箱与拆箱功能,使得在基本类型和对应的包装类之间转换更加方便。 ```java int i = 10; Integer j = i; // 自动装箱 int k = j; // 自动拆箱 ``` ##### ...
包装类是原始数据类型的对象表示,支持自动装箱和拆箱。Map集合存储键值对,常见的实现包括HashMap和LinkedHashMap。异常处理确保程序在遇到错误时能够优雅地恢复或报告错误。 总之,Java基础涵盖了广泛的编程概念...
在Java中,当基本数据类型和包装类交互时,编译器会自动进行装箱和拆箱操作。 例如,`Integer iOb = 1000;` 这一行代码就是自动装箱的例子,它将整型值1000转换为Integer对象。相反,`int i = iOb;` 这行代码则是...
在JDK1.5之前,将基本类型与对应的包装类进行转换需要手动操作。Java 5.0引入了自动装箱和拆箱,使得这种转换更加便捷。例如,int和Integer之间的转换可以自动完成,简化了代码。 五、增强的for循环(Enhanced For ...
自动装箱是Java 5引入的一种特性,它允许基本类型与对应的包装类之间进行隐式转换。在第三个题目中,Short变量`s1`和`s2`的比较引发了对装箱和拆箱的理解。Java会尝试将`s1`和`s2`转换为相同的对象引用来执行`==`...
5. **Java包装类**:如`Integer.parseInt()`和`Integer.toString()`等方法,用于包装类与原始类型之间的转换。 6. **常用类和接口的使用**:如`System.out.println()`、`Math.random()`等。 **文件IO和数据库编程*...
3. **Autoboxing和Unboxing(自动装箱与拆箱)**:Java 5.0自动实现了基本类型与对应的包装类之间的转换。当基本类型与对象之间需要进行操作时,系统会自动进行装箱和拆箱,简化了代码,减少了程序员的工作负担。 4...
Integer是int的包装类,可以支持null值,提供了更多方法,如compare()、parseInt()等。在自动装箱拆箱机制下,两者可以在一定情况下互换使用。 以上就是Java经典技术中的一些基础知识点,理解和掌握这些内容对于...
3. **自动装箱与拆箱**:Java 5.0引入了自动装箱和拆箱机制,使得原始类型(如int)和它们对应的包装类(如Integer)之间可以无缝转换,简化了编程工作。 4. **变量注解(Annotations)**:注解是一种元数据,用于...
3. **自动装箱与拆箱**:对于基本类型对应的包装类,泛型`Hashtable`支持自动装箱(如`Integer`与`int`之间)和拆箱,简化了代码。 4. **可读性**:通过明确指定类型,代码的意图更加清晰,阅读和维护起来更容易。 ...