Java基础 (2) - 基本数据类型及包装类

关键字
位数、常量池、包装类(自动装拆箱)

8种基本数据类型
整数类型:byte,short,int,long
浮点数类型:float,double
字符类型:char
布尔类型:boolean

位数
1、JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1个字节。
2、byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256。

包装类
能解决
1、基本类型并不具备对象的特性: 没有成员变量,方法可以调用。
2、不支持面向对象的变成机制(不可变),包装类。Byte,Short,Integer,Long,Double,Float,Charater,Boolean。

JDK1.5,开始提供自动装箱和拆箱功能,基本类型变量赋给对应的包装类变量称之为装箱。自动拆箱与之相反。
Java 7增强了包装类的功能,为所有的包装类提供了一个静态的compare(xxx val1,xxx val2)方法,来比较两个基本类型值得大小。(解决 两个128自动装箱后,比较它们的大小并不相等问题)
Java 8再次增强包装类的功能,可以支持无符号运算。

基本类型和包装类区别
1、声明方式不同:包装类型需要使用new关键字来在堆中分配存储空间,基本类型不需要。
2、存储方式及位置不同:基本类型存储在栈中,而包装类型是在堆中,然后通过引用来使用。
3、初始值不同:包装类型的初始值为null,基本类型的初始值 eg:int -> 0,boolean ->false。
4、使用场景不同:常用的集合如Collection、Map时必须使用包装类(不可变性)。

常量池
好处:
1、节省内存空间
2、提高运行效率
包装类
Byte,Short,Integer,Long,Character,Boolean 5种 ,在 -128 ~ 127中用到常量池,会自动拆箱装箱,其余数字范围则会新建实例
两种浮点数类型的包装类Float,Double并没有实现常量池技术

基础类型
被final修饰时:
??如果是成员变量,一定会存入常量池,比如变量b;
??如果是局部变量,既不会存入常量池,也不在栈中;

没有被final修饰时:
??不管是成员变量还是局部变量,都不一定会被存入常量池,int类型的变量会以2的15次方为基准,大于等于这个数就会存入常量池,小于则不会;
??但是double类型1d不会,2d会,这个原因也没找到是为什么;

包装类常见问题
一.数值包装类
/ Integer案例/
Integer i1 = 128;
Integer i2 = 128;
Integer i3 = 127;
Integer i4 = 127;
System.out.println(i1 == i2);//false
System.out.println(i3==i4); //true
??
/ Long案例/
Long l1 = 128L;
Long l2 = 128L;
Long l3 = -128L;
Long l4 = -128L;
System.out.println(l1 == l2);//false
System.out.println(l3==l4);//true
???
/Float(Double)案例(形成对比)/
Float f1 = 128f;
Float f2 = 128f;
Float f3 = 127f;
Float f4 = 127f;
System.out.println(f1 == f2);//false
System.out.println(f3==f4);//false

二.原理
因为Byte,Integer,Long对在-128~127之间的数据进行了缓存,如果待转换的数值 i 在该范围了则直接从缓存取,而不是new?Integer(i)。
??? Float和Double则是每次都new一个新的,没有缓存机制,所以都为false。

三.JDK源码:
/Integer的实现/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];//IntegerCache.high为127,取缓存
else
return new Integer(i);
}
/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);
}
/Float的实现(无缓存)/
public static Float valueOf(float f) {
return new Float(f);
}

原文地址:https://blog.51cto.com/4397014/2436217

时间: 2024-11-05 12:09:21

Java基础 (2) - 基本数据类型及包装类的相关文章

java 基础笔记 基本数据类型对象包装类

基本数据类型对象包装类: 为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作. 用于描述该对象的类就称为基本数据类型对象包装类. 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char   Character boolean Boolean 该包装对象主要用于基本类型和字符串之间的转换. 基本类型-->字符串 1.基本类型数据+"&quo

黑马程序员——Java基础---StringBuffer、Arrays、包装类

--Java培训.Android培训.iOS培训.UI培训.PHP培训.期待与您交流! -- 一.StringBuffer类和StringBuilder类 1. StringBuffer类是线程安全的可变字符序列 2. StringBuffer和String的区别 String是一个不可变的字符序列 StringBuffer是一个可变的字符序列 3.构造方法和方法 StringBuffer的构造方法: public StringBuffer():无参构造方法 public StringBuffe

java八种基本数据类型及包装类详解

详解一.八种基本数据类型常识 1.1.基本常识表 对于上图有以下几点需要注意: java八种基本数据类型分为四类八种,四类分别为整型.浮点型.布尔型.字符型:八种分别为byte.short.int.long.float.double.boolean.char: java八种基本数据类型的字节数:分别为1.2.4.8个字节:1字节(byte.boolean). 2字节(short.char).4字节(int.float).8字节(long.double): 整数的默认类型为int,浮点数的默认类型

java基础随笔 字符数据类型char的单引号

public class Love{ public static void main(String[] args){ System.out.println('*'+'\t'+'*'); System.out.println("*"+"\t"+"*") } } 运行结果   第一行为  93 第二行为  *        * 原因 第一行中'\t' 单引号  识别为字符数据类型char,char类型是可以运算的,在第一行中+做了运算符. 第二行&q

Java基础——变量、数据类型

一 .变量 1.计算机的内存类似于人的大脑,计算机使用内存来记忆大量运算时要使用数据.内存是一个物理设备,如何来存储一个数据呢?很简单,把内存想象成一间旅馆,要存储的数据就好比要住宿的客人. 首先,旅店的服务人员会询问要住什么样的房间,如:单人间.双人间.总统套间:然后,根据选择的房间类型,服务员会安排合适的房间.“先开房间,后住”就描述了数据存入内存的过程. 首先,根据数据类型的类型为它在内存中分配一块空间(即找一个合适的房间),然后数据就可以放进这个空间(即入住). 那么为什么对存储空间有要

Java基础篇—基本数据类型

八种数据类型 数值型: 整数型:byte.shot.int.long byte:长度为28(-27~27-1) shot:长度为216(-215~215-1) int:长度为232(-231~231-1) long:长度为264(-263~263-1) 浮点型:float.double float:长度为232(初始化需要在小数后面加f,例:float num=3.14f) double:长度为264(初始化两种形式均可,例1:double num=3.1415926d:例2:double nu

Java基础——变量及数据类型

每种语言中都会设计到许多数据,于是,你会接触到不同的数据类型,初次接触数据类型是也曾晕晕乎乎,在java语言中,终于有点明白了,梳理一下,与君共勉. 变量的概念 内存中的一个存储区域 变量名+数据类型 可在同一类型范围内不断变化 为什么定义变量: 用于不断的存放同一类型的常量,并可以重复使用 使用变量注意: 变量的作用范围,一对{}之间有效 初始化值 定义变量的格式: 数据类型   变量名=初始化值 eg: int x = 4 注:格式固定 理解:变量就如同数学中的未知数. 数据类型: 整数默认

Java Number类(数据类型的包装类)

Java Number 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65; byte mask = 0xaf; 1 2 3 1 2 3 然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java语言为每一个内置数据类型提供了对应的包装类. 所有的包装类(Integer.Long.Byte.Double.Float.Short

《java开发实战经典》读书笔记——第3章 Java基础程序设计之数据类型划分20151026

数据类型 基础数据类型 数值型 整数类型 浮点类型 字符型 布尔型 引用数据类型 类 接口 数组