-
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]之间时,不会去创建对象而是从各自对应的缓存区中返回对象,例如:
Long t1 = 128L; Long t2 = 128L; System.out.println(t1 == t2); //false,t1、t2均由new产生新的对象。 Long t3 = 127L; Long t4 = 127L; System.out.println(t3 == t4); //true,从缓存区中取出返回的是同一个对象,==比较的是地址值,所以这里当然返回true了。
实现原理:因为自动装箱会使用各自包装类的valueOf(),这里只给出Long包装类型底层实现。
public static Long valueOf(long l) { final int offset = 128; if (l >= -128 && l <= 127) { // will cache return LongCache.cache[(int)l + offset]; } return new Long(l); } private static class LongCache { private LongCache(){} static final Long cache[] = new Long[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Long(i - 128); } }
相关推荐
以下是关于Java包装类的详细知识: 1. **包装类的定义与作用** - Java的8个基本数据类型包括byte、short、int、long、char、float、double和boolean。每个都有其对应的包装类,分别是Byte、Short、Integer、Long、...
在使用Java包装类时需要注意自动装箱赋值时可能出现的pitfall,即使用自动装箱赋值时,可能会出现-128到127的数值被静态处理的情况,因为Java中的Integer类对-128到127的数值进行了静态处理,这些数值被缓存在数组...
包装类的主要作用是将基本数据类型转换为对象,以满足Java中只针对对象设计的API和新特性的需求,如泛型、接口等。在面向对象编程中,包装类提供了更多的功能和便利。 二、包装类的使用 1. 自定义包装类:虽然Java...
Java编程语言以其强大的跨平台能力和丰富的库而广受开发者...以上就是Java编程中一些值得注意的细节,熟练掌握这些知识点,能够让你的Java代码更加健壮、高效。在实践中不断学习和总结,你会成为更优秀的Java开发者。
Java中的包装类是面向对象编程的关键元素,它们为Java的基本数据类型提供了面向对象的特性。在Java中,有八种基本数据类型:byte、short、int、long、float、double、char和boolean,每种都有对应的包装类,分别是...
- 避免使用原始类型,尽可能使用对应的包装类,以利用Java的自动装箱拆箱特性。 6. **设计模式**: - 学习并理解常见的设计模式,如单例、工厂、观察者等,它们是解决常见问题的最佳实践。 7. **模块化**: - ...
包装类是 Java 语言中最基本的类之一,它将基本数据类型封装为对象。每个基本数据类型都有对应的包装类,例如 Boolean 对应 boolean、Byte 对应 byte、Short 对应 short、Integer 对应 int、Long 对应 long、...
1. `java.lang`:这是所有Java程序的基础包,包含了基本类型包装类、Object类、String类、Math类等核心类。 2. `java.util`:包含各种实用工具类,如集合框架(List、Set、Map)、日期时间类、队列、堆栈、枚举等。...
这些包装类提供了一些额外的方法,比如转换字符串为相应的数值类型。 #### 三、输入输出操作 Java中的输入输出操作主要依赖于`System.out`进行输出,以及使用`Scanner`类进行输入: ```java // 输出操作 System....
JavaZip压缩类是Java编程语言中用于处理ZIP文件格式的核心工具,主要集中在java.util.zip包中。这个包提供了多种类和接口,使得开发者能够轻松地对数据进行压缩和解压缩,尤其是在开发需要处理大量数据的应用时,如...
在Java编程语言中,为了能够把基本数据类型当作对象处理,提供了包装类的概念。包装类是将基本数据类型封装成类的形式,使它们可以拥有对象的特性。Java语言中一共有八个基本数据类型,它们分别是byte、short、int、...
在Java语言中,`Number`类是一个抽象类,所有的基本数据类型的包装类(如`Integer`、`Long`、`Byte`、`Double`、`Float`、`Short`等)都是它的子类。`Number`类提供了多种方法来处理这些数据类型,包括类型转换、...
在使用反射时,有一些重要的点需要注意: - `Class.forName()`可能会抛出`ClassNotFoundException`,这是因为如果类路径中找不到指定的类,就会发生这种情况。 - 在调用`invoke()`方法时,必须确保参数类型与方法...
### Java中的包机制详解 ...此包包含了构成Java编程基础的类和接口,如`Object`、`String`、基本数据类型包装类等,是Java程序不可或缺的一部分。理解并熟练运用包机制,将有助于开发者构建更加健壮、灵活的Java应用。
在 Java 中,包装类的比较时会遇到一些问题,本文将对这些问题进行详细的介绍和解决方法。 一、包装类比较的注意事项 在 Java 中,包装类的比较时,不会自动拆包,而是地址比较。这意味着,如果两个包装类的值相同...
在Java编程语言中,Integer是int基本数据类型的封装类,提供了许多高级功能和与对象相关的操作。自从Java 5引入自动装箱和拆箱机制以来,我们可以在代码中方便地在int和Integer之间进行转换。然而,对于Integer的...
以下是一些重要的Java编码注意事项: 1. **单例模式的使用**:单例模式是一种设计模式,它限制一个类只能有一个实例。这种模式适用于控制资源的访问、限制实例创建以及实现跨线程的数据共享。然而,并非所有场景都...
在Java中,使用包装类来封装基本类型,并且没有指针的概念,而是使用引用。这意味着在Java中,不能像C++那样直接操作内存地址。 3. **多态性与接口** Java中的多态性是通过继承、接口和抽象类实现的。Java允许一个...
Java中的包装类是针对Java的基本数据类型而设计的,它们为每个基本数据类型提供了一个对应的类,例如`int`对应`Integer`,`double`对应`Double`等。包装类的引入主要有以下好处: 1. **方法扩展**:包装类提供了...
值得注意的是,对于整型包装类`Integer`和`Character`,在-128至127的范围内,Java提供了一种缓存机制。当这个范围内数值的包装类对象被创建时,它们会被存储在一个内部数组`cache`中,以提高性能,避免重复创建对象...