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 SE 5.0及以后版本中,也支持自动拆箱的功能。 **示例代码**: ```java Integer i = 10; int j = i; // 自动拆箱 ``` 这段代码中,...
"详解Java包装类及自动装箱拆箱" Java 包装类是 Java 语言中的一种基本类型的封装体,它将基本类型的值“包装”到对象中,使基本类型的值能够包含在集合中,或者作为方法的返回值。Java 包装类有两个主要的目的:将...
为了解决这个问题,Java 为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有的教材称为外覆类或数据类型类。 包装类的作用是将基本数据类型封装成对象,使其拥有面向对象的特性。每个...
### Java封装类的作用 在Java编程语言中,封装是一种重要的概念,它有助于提高代码的安全性和可维护性。本文将深入探讨Java封装类的作用,并通过具体的示例帮助读者更好地理解这一概念。 #### 封装的基本原理 ...
在Java 5引入了自动装箱和拆箱机制,这使得开发者可以直接将基本数据类型与对应的包装类型互相转换,而无需显式地使用构造函数或转换方法。 - **自动装箱**:将基本数据类型自动转换为其对应的包装类型。例如,`int...
它针对Java语言特点、面向对象与面向过程的区别、Java基本数据类型及其封装类、标识符命名规则、instanceof关键字的作用以及Java自动装箱与拆箱的知识点进行了阐述。下面将详细展开这些知识点。 1. Java语言特点: ...
这些封装类的一个重要特性是它们支持自动装箱(boxing)和拆箱(unboxing)机制。这意味着基本数据类型可以直接赋值给对应的封装类,反之也可以将封装类对象直接转换为基本类型,这大大简化了编程过程。 封装类还有...
Java 中的自动装箱和拆箱是指基本类型和封装类之间的自动转换。自动装箱是指基本类型转换为封装类,而拆箱是指封装类转换为基本类型。 五、结论 Java 八种基本类型和基本类型封装类是 Java 编程语言的基础,理解...
从Java 5开始,Java引入了自动装箱/拆箱机制,使得基本数据类型和对应的包装类型能够相互转换。例如,int可以自动装箱成Integer,反之亦然。 面试题解析 本文档还包括了六个Java面试题的解析,涵盖了面向对象特征...
自动装箱(Autoboxing)是Java 5引入的一个特性,它允许我们将基本数据类型(如int、double、char等)自动转换为对应的包装器类对象(如Integer、Double、Character)。例如,当我们试图将一个int值放入只能存储...
本文将为您带来Java基础教程的最新整理,涵盖Java中的数据类型、基本类型、包装类型、自动装箱和拆箱、缓存池等重要知识点。 一、数据类型 Java中的数据类型可以分为两大类:基本类型和引用类型。基本类型包括byte...
1. **自动装箱与拆箱**: - **自动装箱**:将原始类型转换为对应的包装类对象,如`Integer i = 10;`,编译器会自动进行装箱操作。 - **自动拆箱**:将包装类对象转换为原始类型,如`int value = i;`,编译器会自动...
Java SE 5之后,Java引入了自动装箱与拆箱机制,自动装箱是将基本数据类型转换为相应的封装类实例,拆箱则相反,是将封装类转换回基本数据类型。这一机制极大地简化了Java编程语言的使用,特别是在集合框架中操作...
Java基础知识是学习Java编程语言的基础,包括Java基本数据类型、Java自动装箱与拆箱、Java数组与循环遍历、Java泛型与可变参数、数据类型与变量运算符与表达式等知识点。掌握这些基础知识是学习Java编程语言的第一步...
在Java面试汇总.pdf这份资料中,涵盖了Java语言的基础知识,包括Java的特性、面向对象与面向过程的区别、基本数据类型的大小和封装类、标识符命名规则、instanceof关键字的使用、Java的自动装箱与拆箱机制等关键知识...
本文档旨在总结 Java 面试题及参考答案,涵盖了 Java 语言的基本特点、面向对象和面向过程的区别、基本数据类型、引用类型、标识符的命名规则、instanceof 关键字的作用、Java 自动装箱与拆箱等知识点。 一、Java ...