`
xiemingmei
  • 浏览: 207271 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 基本数据封装类自动装箱与拆箱

阅读更多
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {

	(1)	Long t = new Long(1);
	(2)	System.out.println(t+1);
		
	(3)	Long t2 = t + 1;
	(4)	System.out.println(t2);
	}
}

(2)t+1过程:t.longValue + 1;
(3)t+1过程:t.longValue + 1得到long型值A,再调用Long.valueOf(A)变成Long给t2.



javap的代代码:
  new     #19; //class java/lang/Long
  dup
  lconst_1
  invokespecial   #21; //Method java/lang/Long."<init>":(J)V
  astore_1
  getstatic       #24; //Field java/lang/System.out:Ljava/io/PrintStream;
  aload_1
  invokevirtual   #30; //Method java/lang/Long.longValue:()J
  lconst_1
  ladd
  invokevirtual   #34; //Method java/io/PrintStream.println:(J)V
  aload_1
  invokevirtual   #30; //Method java/lang/Long.longValue:()J
  lconst_1
  ladd
  invokestatic    #39; //Method java/lang/Long.valueOf:(J)Ljava/lang/Long;

  astore_2
  getstatic       #24; //Field java/lang/System.out:Ljava/io/PrintStream;
  aload_2
  invokevirtual   #43; //Method java/io/PrintStream.println:(Ljava/lang/Object;)V


另外,注意在做等值比较时,要注意了,因为这里非常容易被忽略而导致程序bug。
它们是按照声明的类型进行的,如果有基本数据类型,则封装类会自动转型为基本数据类型再进行比较;如果封装类使用equals,则后面的基本数据类型自动转成封装类:
		
  Integer t1 = new Integer(1);//等同于:Integer t1 = 1;
  Integer t2 = new Integer(1);//等同于: Integer t2 = 1;
  (5)System.out.println("t1==t2:" + (t1==t2));
  (6)System.out.println("t1==1:" + (t1==1));
  (7)System.out.println("t2==1:" + (t2==1));
  (8)System.out.println("t2.equals(1):" + (t2==1));[/

输出为:
t1==t2:false
t1==1:true
t2==1:true
t2.equals(1):true

原因:
(5):t1 t2都按封装类进行等值比较,属于不同的对象,所以不相等;
(6):t1自动转成int型,再与1相比,值是相等的;
(7):t2自动转成int型,再与1相比,值是相等的;
(8):1自动转成new Integer(1),再与t2做equals,他们的值也是相等的。

建议:用equals来替换==,这样可以省去麻烦,避免错误。


分享到:
评论

相关推荐

    Java面试经典题,对JAVA面试很有帮助

    3.八种基本数据类型的大小,以及他们的封装类 4.标识符的命名规则 5.instanceof 关键字的作用 6.Java自动装箱与拆箱 7.重载和重写的区别 8.equals与==的区别 9.Hashcode的作用 10.String、String StringBuffer 和 ...

    Java企业面试问题2.txt

    型叫做装箱,从封装类型到基本数据类型叫拆箱,自动拆装箱是jdk5.0提供的新特特性 2.3当我们要调用的方法中存在重载的时候,即基本类型数据作为唯一参数的方法与 该基本类型包装类作为唯一参数的方法重载,这时候...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 ...

    以下是一些常见的JAVA面试题

    8. 解释一下JAVA中的自动装箱和拆箱机制。 9. 解释一下JAVA中的反射机制,包括Class、Method、Field等类的使用。 10. 解释一下JAVA中的MVC模式,以及它在企业级应用中的作用。 11. 解释一下JAVA中的Spring框架,包括...

    Java工程师面试复习指南

    Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8新特性终极指南 序列化和反序列化 ...

    Java基础知识点.html

    Date类 自动拆箱和自动装箱 Arrays 类和接口的关系 内部类 成员内部类 局部内部类 匿名内部类 抽象类 接口 多态 封装 类和对象 方法 StringBuilder类 String类 static for循环 final 权限修饰符 跳转控制语句 while...

    Java阿里内部最新2022版面试题及解答266页免费下载

    3 、八种基本数据类型的大小,以及他们的封装类 4、标识符的命名规则 5、instanceof 关键字的作用 6、Java自动装箱与拆箱 7、 重载和重写的区别 8、 equals与==的区别 9、 Hashcode的作用 10、String、String ...

    Java开发技术大全(500个源代码).

    readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java ...

    Java面试技术面知识扩展包第一弹

    也可能会涉及Java的特性,如自动装箱拆箱、泛型、Lambda表达式等。 2. 面向对象编程(OOP):面试官可能会询问您关于面向对象编程的概念和原则,如封装、继承、多态、抽象类、接口等,并要求您应用这些概念解决问题...

    corejava培训文档

    17.3.1. 在基本数据类型和封装类之间的自动转换 17.4. 类型安全的枚举 17.5. 静态引入 17.6. C风格的格式化输出 17.7. Building Strings(StringBuilder类) 17.8. 可变长的参数 17.9. JAVA5.0 的注释 (Annotation...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    4.2.2 自动装箱、拆箱 92 4.2.3 装箱的内幕 93 4.3 数组对象 96 4.3.1 数组基础 96 4.3.2 操作数组对象 99 4.3.3 数组复制 105 4.4 字符串对象 108 4.4.1 字符串基础 108 4.4.2 字符串特性 111 ...

    JAVA基础课程讲义

    自动装箱和拆箱?autoboxing,unboxing 119 字符串相关类(String、 StringBuffer 、 StringBuilder) 120 String类的常用方法(已讲过,不再讲!) 120 StringBuffer和StringBuilder 121 String和StringBuffer和...

    java基础案例与开发详解案例源码全

    3.2.1 Java中的八种基本数据类型34 3.2.2 普及二进制36 3.2.3 进制间转换37 3.2.4 基本数据类型间转换38 3.2.5 数据类型应用实例38 3.2.6 引用数据类型39 3.3 关键字.标识符.常量39 3.3.1 变量命名规范39 3.3.2 ...

    java学习笔记 初学者必读

    17.3.1. 在基本数据类型和封装类之间的自动转换 17-69 17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building Strings(StringBuilder类) 17-73 17.8. 可变长的参数 17-73 ...

    java8集合源码-Java-Programming-Masterclass:代码和课程笔记,Udemy-面向软件开发人员的Java编程大师班

    内置列表、自动装箱和拆箱 31-01-2019 内部和抽象类和接口 13-05-2019 Java泛型 14-05-2019 命名约定和包,“静态”和“最终”关键字。 21-05-2019 Java 集合 03-06-2019 JavaFX 第 14 节 基本输入和输出,包括 java...

    AIC的Java课程1-6章

    第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...

    JAVA语言程序设计课程标准.doc

    "流 " " " " " "程 " " " " " "1 "Java基础 "对比教学 "工作任务包 "引导案例 " "2 "程序结构、数组 "现场编程 "工作任务包 "引导案例 " "3 "类与对象及常用包"任务驱动 "工作任务包 "阶段项目 " "4 "封装、继承、...

    Java JDK实例宝典

    1 数字与数字封装类 3. 2 格式化数字 3. 3 数字的舍入 3. 4 转换数字的进制 3. 5 生成随机数 3. 6 处理大数字 第4章 数组与集合 4. 1 使用Arrays 4. 2 求质数. 4. 3 动态调整...

    JAVA 范例大全 光盘 资源

    实例93 自动装箱与拆箱 245 实例94 for/in循环 247 实例95 参数不确定(可变长参数) 249 实例96 方法改变(协变式返回类型) 251 实例97 静态导入 252 实例98 动物搭配(泛型) 253 实例99 人员信息(枚举...

    NewJavaStudy:公司学习代码

    物件常用方法包装类装箱与拆箱 :弦类 字符串扩展,常用API之清单 设置地图以及实现类 地图细讲 集合类扩展数学类异常体系 日期日历 I / O基础文件操作字节流 I / O流对CSV的操作 设计模式单例工厂 抽象工厂内部类...

Global site tag (gtag.js) - Google Analytics