`

【Java核心-基础】原始数据类型

    博客分类:
  • Java
 
阅读更多

Java原始数据类型

Java中的变量类型分为两大类:原始数据类型 和 引用类型。

原始数据类型就是常说的值类型,共8种。

它们有各自的包装类型,提供了一些非常有用的基本操作。而且包装类都是不可变类(无法被继承、也不能改变内部的值)。

 

类型 含义 包装类
byte 8-bit 有符号整数 Byte
short 16-bit 有符号整数 Short
int 32-bit 有符号整数 Integer
long 64-bit 有符号整数 Long
float 单精度 32-bit IEEE754 浮点数 Float
double 双精度 64-bit IEEE754 浮点数 Double
boolean 只有 true 和 flase 两个值 Boolean
char 16-bit Unicode字符 Character

 

*JVM 不保证 long 和 double 更新操作的原子性。它们的更新被分为对高 32-bit 和 低 32-bit 的两个操作。

可将 long 和 double 变量声明为 volatile 或对其更新操作进行同步(AtomicLong的内部值就被声明为 volatile)。

 

谨慎使用包装类对象

Java 中的自动装箱/拆箱(boxing/unboxing)机制可以根据程序上下文自动转换原始数据类型与包装类型。

该操作只是语法糖,它发生在编译阶段。即,自动拆装箱与显式代码转换在字节码层面上是一样的。

 

但写代码时还是应该根据实际业务含义的需要选择合适的类型,而不是盲目地选择原始类型或包装类型。

如果只需原始类型,就选原始类型。拆装箱需要额外的性能开销;包装类对象占用的内存也更多。

 

 在一些高性能非常重要的程序中,应尽量少创建对象。

  • 包装类、动态数组(如,ArrayList)会需要更多的开销
  • 对象数组存储的是引用,对象分散在堆的不同位置,导致无法充分利用CPU缓存机制

这类场景中,原始数据类型、数组是比较有优势的。甚至可以考虑用本地代码。

 

计数器实现方式对比示例:

class Counter {
  private final AtomicLong counter = new AtomicLong();

  public void increase() {
    counter.incrementAndGet();
  }
}

class CompactCounter {
  private volatile long counter;
  public static final AtomicLongFieldUpdater<CompactCounter> updater
    = AtomicLongFieldUpdater.newUpdater(CompactCounter.class, "counter");

  public void increase() {
    updater.incrementAndGet(this);
  }
}

 

包装类的值缓存

在实际业务中,大部分数据操作集中在有限的、较小的数值范围。

为了提高效率,Byte、Short、Integer、Long、Boolean、Character都有缓存,以避免每次需要一个包装类对象时都 new 一个实例。

通过调用这些包装类的 valueOf() 方法利用该缓存机制

 

默认缓存范围

包装类 范围 说明
Integer -128 ~ 127  
Short -128 ~ 127  
Long -128 ~ 127  
Byte -128 ~ 127 Byte 本身取值范围就是 -128 到 127,所以全都被缓存了。
Boolean TRUE、FALSE boolean 本就只有 true 和 false 两个值
Character \u0000 ~ \u007F 共128个

 

Integer 缓存范围调整

Integer 缓存比较特殊,它允许被调整(可能因为这方面的需求比较多,所以专门提供了这个机制)。

可通过设置 JVM 启动参数 -XX:AutoBoxCacheMax 调整允许被缓存的最大值

 

分享到:
评论

相关推荐

    Java核心技术-卷1(基础知识-原书第10版)

    3. **基本语法**:包括数据类型(原始类型和引用类型)、变量、常量、运算符、流程控制(条件语句、循环语句)以及异常处理。 4. **面向对象编程**:讲解类、对象、封装、继承、多态等概念,同时介绍接口和抽象类。...

    java基础教程----精华版

    - **数据类型**:Java有两大类数据类型,即原始类型(primitives)和引用类型(references)。 - **运算符**:包括算术、比较、逻辑、位、赋值等运算符,用于进行各种计算和判断。 - **流程控制**:如if语句、...

    java 数据类型讲解

    Java的数据类型主要分为两大类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 ##### 2.1 原始数据类型 原始数据类型包括整型、浮点型、布尔型和字符型等,它们直接存储具体的...

    Java核心技术++卷1++基础知识++原书第10版--中文版扫描--带书签已OCR

    3. **Java语法基础**:包括类、对象、接口、包的概念,数据类型(原始类型与引用类型),运算符,流程控制(条件语句、循环语句),异常处理等。 4. **类和对象**:详细讲解类的定义、构造函数、继承、多态性、封装...

    Java面试八股文001-Java-Java基础

    Java中的基本数据类型共有8种,它们分别是: - `byte`:字节类型,占用1字节(8位)。 - `short`:短整型,占用2字节(16位)。 - `int`:整型,占用4字节(32位)。 - `long`:长整型,占用8字节(64位)。 - `...

    MapReduce模型--自定义数据类型

    首先,了解Java和Hadoop之间的基本字段映射关系是理解自定义数据类型的基础。例如,在Java中常用的String类型,在Hadoop中对应的是Text类型。这种映射关系简化了数据在Hadoop生态系统中的处理流程,但当遇到特殊需求...

    Java 基础核心总结_.zip

    3. **Java基本语法**:包括数据类型(原始类型与引用类型)、变量、运算符、流程控制(条件语句、循环结构)、方法定义与调用,以及字符串处理等。 4. **Java执行流程**:从源代码到可执行程序,经历编译(javac...

    Java语言程序设计-基础篇-中文ppt-第十九章.ppt

    这两个类提供了读写基本数据类型(如int, double, String等)的便捷方式。它们扩展了`FilterInputStream`和`FilterOutputStream`,使得在二进制流中处理Java的简单类型变得简单。 5. **对象的序列化与反序列化**:...

    java核心知识word版-1

    它包括变量、数据类型(如整型、浮点型、字符型和布尔型)、运算符(如算术、比较和逻辑运算符)、控制结构(如if语句、for循环和while循环)以及方法的定义和调用。 2. **类与对象**:Java是面向对象的,这意味着...

    java-数据类型转换、运算符、方法入门_java_

    在Java编程语言中,数据类型转换、运算符和方法是构建程序的基础元素。这篇入门级资料将引导初学者深入理解这些关键概念。 首先,我们来探讨数据类型转换。Java提供了两种类型转换:自动类型转换(隐式转换)和强制...

    java面试-中级篇

    - JavaScript有两类数据类型:基本数据类型(原始数据类型)和引用数据类型。 - 基本数据类型包括:String(字符串)、Boolean(布尔型)、Number(数字)、Undefined(未定义)、Null(空)。 - 引用数据类型...

    Java核心语法笔记

    这份"Java核心语法笔记"涵盖了Java开发中的基础到高级概念,对于任何希望深入理解Java或者复习基础知识的开发者来说,都是宝贵的资源。以下是对Java核心语法的一些详细说明: 1. **基础语法** - **变量**:Java中...

    protobuf-java-2.5.0.jar

    4. **数据类型支持**:protobuf支持多种基础数据类型以及复杂的数据结构,如消息(message)、数组、枚举(enum)和可选/重复字段。 5. **反射API**:protobuf提供反射API,允许在运行时动态地处理protobuf消息,...

    Crazy-JAVA-mind-map.zip_Crazy JAVA mind map_crazy_java-mindmap_m

    接着,深入到数据类型,Java分为两大类:原始数据类型(如int、char、boolean)和引用数据类型(如类、接口、数组)。这些数据类型的存储、转换、操作方式都是学习的重点。在思维导图中,这部分会通过子节点详细展示...

    大学课程讲义-Java基础-面向对象.pptx

    Java是一种面向对象的编程语言,它的核心理念是通过模拟现实世界中的对象来构建软件系统。在Java中,类(Class)是对象(Object)的蓝图,它定义了对象的属性(Attributes)和行为(Methods)。面向对象编程的主要...

    JAVA核心技术(代码)

    2. **数据类型**:Java分为原始数据类型(如int、char、boolean等)和引用数据类型(如类、接口和数组)。理解它们的区别和用法是编程的基础。 3. **控制结构**:包括条件语句(if-else)、循环(for、while、do-...

    JAVA习题----选择题.pdf

    3. Java核心包:`java.lang`是Java的核心包,提供基础类,如`String`、`Object`和`System`。 4. 循环语句:给定的代码片段是一个for循环,用于更新变量`j`的值。当循环结束时,如果i从7递减到小于等于0,`j`将乘以2...

    JAVA-puzzle-game.zip_JAVA 拼图 作业_java 拼图

    Java编程语言在游戏开发领域有着广泛的应用,尤其是在教育环境中,它被用来教授基础的编程概念和逻辑思维。本项目是一个基于Java的拼图游戏,旨在帮助学习者掌握Java编程的基本技巧,同时通过游戏的形式增强问题解决...

    Android逆向-java代码基础(4)

    3. 变量与数据类型:Java提供了丰富的数据类型,包括基本类型(如int、boolean)和引用类型(如类、接口)。逆向工程师需识别不同类型的变量,理解它们在内存中的表示,以及它们如何在程序中传递和使用。 4. 控制流...

Global site tag (gtag.js) - Google Analytics