`

java包装类的几点注意

    博客分类:
  • J2SE
阅读更多

 java中8种基本类型变量对应的包装类:

byte -- Byte

short -- Short          

int  --  Integer

long -- Long

float -- Float

Double -- Double

boolean -- Boolean

char -- Character   

 

  • 包装类型的自动拆箱与自动装箱实现原理

          从JDK1.5之后java引入了自动装箱与自动拆箱技术。

          一般我们产生一个对象都是通过new的形式,而包装类型的自动装箱则是这样:

Long t1 = 1000L;

 

         不必感到诧异,其实底层在编译阶段就把上述代码改成:

Long t1 = Long.valueOf(1000L);

   ---------------------------------------------------------------------------------------------------

         拆箱机制:

long t2 = t1;

 

 拆箱底层编译期实现:

long t2 = t1.longValue();

 

       以上就是包装类型的拆箱以及装箱的原理。

 

 

  • 包装类型缓存区的使用

对于Byte、Short、Integer、Long、Character这几种包装类型,当自动装箱的数值在[-128, 127]之间时,不会去创建对象而是从各自对应的缓存区中返回对象,例如:

Java代码  收藏代码
  1. Long t1 = 128L;     
  2. Long t2 = 128L;  
  3. System.out.println(t1 == t2);  //false,t1、t2均由new产生新的对象。  
  4.   
  5. Long t3 = 127L;  
  6. Long t4 = 127L;   
  7. System.out.println(t3 == t4);  //true,从缓存区中取出返回的是同一个对象,==比较的是地址值,所以这里当然返回true了。  

 

 实现原理:因为自动装箱会使用各自包装类的valueOf(),这里只给出Long包装类型底层实现。

Java代码  收藏代码
  1. public static Long valueOf(long l) {  
  2.     final int offset = 128;  
  3.     if (l >= -128 && l <= 127) { // will cache  
  4.         return LongCache.cache[(int)l + offset];  
  5.     }  
  6.     return new Long(l);  
  7. }  
  8.   
  9. private static class LongCache {  
  10.     private LongCache(){}  
  11.   
  12.     static final Long cache[] = new Long[-(-128) + 127 + 1];  
  13.   
  14.     static {  
  15.         for(int i = 0; i < cache.length; i++)  
  16.             cache[i] = new Long(i - 128);  
  17.     }  
  18. }  

 

分享到:
评论

相关推荐

    四川大学 java系统类PPT

    在“四川大学 Java系统类PPT”中,涵盖了几个关键的知识点,包括输入输出、包装类、字符串处理、Main方法参数以及集合类的使用。以下是这些主题的详细说明: 1. 输入输出初步: Java的输入/输出(I/O)系统是通过流...

    JAVA包装类及自动封包解包实例代码

    JAVA中的包装类是对应于基本数据类型的一类特殊的类。它们使得基本数据类型能够享受面向对象编程带来的便利。例如,包装类提供了一系列方法,能够方便地进行数值运算、比较等操作。包装类包括了:Byte、Short、...

    day009Java常用类.doc

    学习Java常用类时,我们需要关注以下几点: 1. 类:理解类的基本概念,知道如何定义一个类,以及如何理解他人编写的类。类是面向对象编程的核心,它描述了一类事物的属性和行为。 2. 类的成员:包括字段(变量)、...

    Java软件开发实战 Java基础与案例开发详解 8-2 对象包装器 共6页.pdf

    这样做有以下几点好处: - **便于存储**:可以在集合或数组中存储这些包装类的对象。 - **提供方法**:每个包装类都提供了一些与基本数据类型相关的有用方法,例如转换、比较等。 - **支持null值**:包装类可以表示...

    Java基础入门教程 第5章 Java基础类的应用(共42页).ppt

    包装类是Java提供的对应原始数据类型的类,如Integer、Double等,它们提供了将原始类型转换为对象的便利。例如,可以通过`valueOf()`方法将字符串转换为对应的数值类型。 在实际编程中,包装类的用法可以帮助我们更...

    EigenC++快速矩阵库的Java包装器_C++_Java_下载.zip

    "EigenC++快速矩阵库的Java包装器"的实现通常涉及以下几个关键知识点: 1. **JNI(Java Native Interface)**:JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在这个案例中,JNI被用来在...

    从C++转到Java需注意的地方

    从C++过渡到Java,开发者需要注意以下几个关键点,以便更好地适应纯面向对象的Java编程。 1. **内存管理与垃圾回收** 在C++中,程序员需要手动进行内存分配和释放,而Java则采用了自动垃圾回收机制。Java的垃圾...

    java笔记 java笔记

    - **自动装箱/拆箱**:允许自动在基本类型和对应的包装类之间进行转换。 - **静态导入**:可以静态导入类中的静态成员,简化代码。 - **可变参数**:方法可以接受任意数量的同类型参数。 以上是Java的基础知识和...

    2024内部类,泛型枚举包装类

    ### 2024年内部类与泛型枚举包装类详解 #### 一、内部类概述 **内部类**是Java中一种特殊类的定义方式,它允许在一个类的内部定义另一个类。这种特性增加了类的设计灵活性,使得类与类之间能够更好地封装和组织。 ...

    Java知识点大全(面试必备)

    - 为方便操作,Java为每种基本类型提供了包装类,例如int对应Integer。 - 自动装箱/拆箱机制:基本类型与包装类型之间可以自动转换。 5. **构造器** - 构造器不可被重写,但可以被重载,即在同一个类中创建多个...

    java2年工作经验简历_java简历.doc

    在这段时间里,他们通常会掌握以下几个关键的知识点: 1. **基础语法与核心概念**:掌握Java的基础语法,包括数据类型、运算符、流程控制语句等。理解面向对象编程(OOP)的概念,如封装、继承、多态,并能够设计和...

    多种java常用API

    2. **包装类**: Java提供了8种基本数据类型的包装类,如`Integer`、`Double`等,它们将原始数据类型(如int、double)转换为对象形式,便于在面向对象的编程中使用。包装类还提供了许多额外的实用方法,例如`...

    Java API_5.0中文版

    4. **自动装箱与拆箱**:Java 5.0引入了自动装箱和拆箱机制,使得基本类型与对应的包装类之间可以无缝转换,简化了代码编写。例如,Integer i = 5; 这样的语句在Java 5.0及以后版本中是合法的。 5. **增强的for循环...

    java音频剪辑支持MP3wav 根据时间剪辑

    在实现这些功能时,还需要注意以下几点: - **同步问题**:音频处理通常涉及到大量的I/O操作,需要处理好线程同步,避免数据竞争和资源冲突。 - **错误处理**:音频文件可能因各种原因损坏,确保代码能优雅地处理...

    Java面试汇总.pdf

    自动装箱和拆箱简化了基本类型和它们的包装类之间的操作,使得Java在处理这些类型转换时更为方便。 以上内容为Java面试汇总.pdf文档中的关键知识点,对于准备Java面试的应聘者来说,这些知识点是必须掌握的基础内容...

    Java1.6api

    1. **基础类库**:如`java.lang`包,这是每个Java程序的基础,包括基本数据类型包装类、`Object`类(所有类的父类)、异常处理、线程管理等。例如,`String`类用于字符串操作,`System`类提供了系统相关的全局变量和...

    java全集.pdf JAVA全集

    Java程序的执行过程大致分为以下几个步骤: 1. 编写源代码并保存为`.java`文件。 2. 使用Java编译器(javac)将源代码编译成字节码(`.class`文件)。 3. 字节码由Java虚拟机(JVM)解释执行或通过JIT编译器转换为...

    java反射-英文版反射规范

    虽然Java反射提供了一种非常灵活的方式来操作类和对象,但在实际应用中也需要注意几个关键点: ##### 1. **安全性** - 使用反射可能会导致安全漏洞,因为可以访问到私有成员。 - 在设计应用程序时应限制反射的...

    动力节点老杜Java基础入门学习教程分享——常用类

    综上所述,本文介绍了 Java 编程语言中一些常用的类,包括 `String`、`StringBuffer`、`StringBuilder`、基本类型的包装类、日期类、数字类、`Random` 类以及枚举类型。这些类和接口是 Java 程序员经常使用的工具,...

Global site tag (gtag.js) - Google Analytics