`
xiemingmei
  • 浏览: 211919 次
  • 性别: 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提供了一个非常便利的功能——自动装箱和自动拆箱。这些功能极大地简化了编程流程,使代码更加简洁易读。 #### 基本数据类型与包装类 在Java中,**基本数据类型**是指...

    Java中自动装箱、拆箱引起的耗时详解

    Java中自动装箱和拆箱是Java语言中一个重要的特性,它可以将基本数据类型和它们的包装类之间进行转换,这个过程是透明的,程序员不需要手动进行转换。但是,这个过程会引起一些耗时问题,本文将详细介绍Java中自动...

    详解Java 自动装箱与拆箱的实现原理

    Java自动装箱和拆箱的实现原理是 Java语言的一个重要特性,它使得开发者可以更加方便地使用原始类型和封装类之间的转换,但是同时也容易引发一些疑惑和错误。通过了解自动装箱和拆箱的实现原理,我们可以更好地使用...

    Java软件开发实战 Java基础与案例开发详解 8-3 装箱和拆箱 共4页.pdf

    拆箱与装箱相反,指的是将包装类对象转换回基本数据类型的过程。同样地,在Java SE 5.0及以后版本中,也支持自动拆箱的功能。 **示例代码**: ```java Integer i = 10; int j = i; // 自动拆箱 ``` 这段代码中,...

    详解Java包装类及自动装箱拆箱

    "详解Java包装类及自动装箱拆箱" Java 包装类是 Java 语言中的一种基本类型的封装体,它将基本类型的值“包装”到对象中,使基本类型的值能够包含在集合中,或者作为方法的返回值。Java 包装类有两个主要的目的:将...

    Java包装类、拆箱和装箱详解.docx

    为了解决这个问题,Java 为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有的教材称为外覆类或数据类型类。 包装类的作用是将基本数据类型封装成对象,使其拥有面向对象的特性。每个...

    java封装类的作用

    ### Java封装类的作用 在Java编程语言中,封装是一种重要的概念,它有助于提高代码的安全性和可维护性。本文将深入探讨Java封装类的作用,并通过具体的示例帮助读者更好地理解这一概念。 #### 封装的基本原理 ...

    28.java基本类型封装.docx

    在Java 5引入了自动装箱和拆箱机制,这使得开发者可以直接将基本数据类型与对应的包装类型互相转换,而无需显式地使用构造函数或转换方法。 - **自动装箱**:将基本数据类型自动转换为其对应的包装类型。例如,`int...

    10万字总结java面试题和答案.pdf

    它针对Java语言特点、面向对象与面向过程的区别、Java基本数据类型及其封装类、标识符命名规则、instanceof关键字的作用以及Java自动装箱与拆箱的知识点进行了阐述。下面将详细展开这些知识点。 1. Java语言特点: ...

    java基本数据类型与其封装类.doc

    这些封装类的一个重要特性是它们支持自动装箱(boxing)和拆箱(unboxing)机制。这意味着基本数据类型可以直接赋值给对应的封装类,反之也可以将封装类对象直接转换为基本类型,这大大简化了编程过程。 封装类还有...

    Java 八种基本类型和基本类型封装类

    Java 中的自动装箱和拆箱是指基本类型和封装类之间的自动转换。自动装箱是指基本类型转换为封装类,而拆箱是指封装类转换为基本类型。 五、结论 Java 八种基本类型和基本类型封装类是 Java 编程语言的基础,理解...

    java面试题大全整理版.docx

    从Java 5开始,Java引入了自动装箱/拆箱机制,使得基本数据类型和对应的包装类型能够相互转换。例如,int可以自动装箱成Integer,反之亦然。 面试题解析 本文档还包括了六个Java面试题的解析,涵盖了面向对象特征...

    BankingApplication:自动装箱,拆箱,包装器概念

    自动装箱(Autoboxing)是Java 5引入的一个特性,它允许我们将基本数据类型(如int、double、char等)自动转换为对应的包装器类对象(如Integer、Double、Character)。例如,当我们试图将一个int值放入只能存储...

    Java基础教程2023年最新整理

    本文将为您带来Java基础教程的最新整理,涵盖Java中的数据类型、基本类型、包装类型、自动装箱和拆箱、缓存池等重要知识点。 一、数据类型 Java中的数据类型可以分为两大类:基本类型和引用类型。基本类型包括byte...

    java原始数据类型的包装类

    1. **自动装箱与拆箱**: - **自动装箱**:将原始类型转换为对应的包装类对象,如`Integer i = 10;`,编译器会自动进行装箱操作。 - **自动拆箱**:将包装类对象转换为原始类型,如`int value = i;`,编译器会自动...

    Java面试汇总_20210314.pdf

    Java SE 5之后,Java引入了自动装箱与拆箱机制,自动装箱是将基本数据类型转换为相应的封装类实例,拆箱则相反,是将封装类转换回基本数据类型。这一机制极大地简化了Java编程语言的使用,特别是在集合框架中操作...

    Java学习路径与方法探讨PPT.pptx

    Java基础知识是学习Java编程语言的基础,包括Java基本数据类型、Java自动装箱与拆箱、Java数组与循环遍历、Java泛型与可变参数、数据类型与变量运算符与表达式等知识点。掌握这些基础知识是学习Java编程语言的第一步...

    Java面试汇总.pdf

    在Java面试汇总.pdf这份资料中,涵盖了Java语言的基础知识,包括Java的特性、面向对象与面向过程的区别、基本数据类型的大小和封装类、标识符命名规则、instanceof关键字的使用、Java的自动装箱与拆箱机制等关键知识...

    java面试题及参考答案.pdf

    本文档旨在总结 Java 面试题及参考答案,涵盖了 Java 语言的基本特点、面向对象和面向过程的区别、基本数据类型、引用类型、标识符的命名规则、instanceof 关键字的作用、Java 自动装箱与拆箱等知识点。 一、Java ...

Global site tag (gtag.js) - Google Analytics