3基本数据类型

文章目录

  • 3.1. Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?
  • 3.2. 自动装箱与拆箱
  • 3.3. 八种基本类型的包装类和常量池

3.1. Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?

Java有 8 种基本数据类型,分别为:

  • 6 种数字类型 :byte、short、int、long、float、double
  • 1 种字符类型:char
  • 1 种布尔型:boolean。

这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean

基本类型位数字节默认值
int3240
short1620
long6480L
byte810
char162‘u0000’
float3240f
double6480d
boolean1false

对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。

注意:

  1. Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析:
  2. char a = 'h'char :单引号,String a = "hello" :双引号

3.2. 自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

当需要在基本数据类型(如intdouble)和对应的包装类(如IntegerDouble)之间进行转换时,Java会自动进行装箱和拆箱操作。下面是一个自动拆箱和装箱的例子:

// 自动装箱
Integer num1 = 10; // 基本数据类型int自动装箱成Integer对象// 自动拆箱
int num2 = num1; // Integer对象自动拆箱成基本数据类型intSystem.out.println("num1: " + num1); // 输出:num1: 10
System.out.println("num2: " + num2); // 输出:num2: 10

在上面的例子中,我们使用了自动装箱将一个int类型的值赋给一个Integer对象。Java自动将基本数据类型的值转换为对应的包装类。接着,我们使用自动拆箱将Integer对象转换回int类型。Java自动将包装类的对象转换为相应的基本数据类型。

通过自动拆箱和装箱,我们可以在基本数据类型和对应的包装类之间进行方便的转换,使得代码更加简洁和易读。

更多内容见:深入剖析 Java 中的装箱和拆箱

3.3. 八种基本类型的包装类和常量池

Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte,Short,Integer,Long,Character,Boolean;前面 4 种包装类默认创建了数值[-128,127] 的相应类型的缓存数据,Character 创建了数值在[0,127]范围的缓存数据,Boolean 直接返回 True Or False。如果超出对应范围仍然会去创建新的对象。 为啥把缓存设置为[-128,127]区间?(参见我的博客-128陷阱)

public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE);
}
private static class CharacterCache {private CharacterCache(){}static final Character cache[] = new Character[127 + 1];static {for (int i = 0; i < cache.length; i++)cache[i] = new Character((char)i);}
}

两种浮点数类型的包装类 Float,Double 并没有实现常量池技术。

        Integer i1 = 33;Integer i2 = 33;System.out.println(i1 == i2);// 输出 trueInteger i11 = 333;  //超过128了Integer i22 = 333;System.out.println(i11 == i22);// 输出 falseDouble i3 = 1.2;Double i4 = 1.2;System.out.println(i3 == i4);// 输出 false

Integer 缓存源代码:

/**
*此方法将始终缓存-128 到 127(包括端点)范围内的值,并可以缓存此范围之外的其他值。
*/public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}

应用场景:

1. Integer i1=40Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40);,从而使用常量池中的对象。
2. Integer i1 = new Integer(40);这种情况下会创建新的对象。
  Integer i1 = 40;Integer i2 = new Integer(40);System.out.println(i1 == i2);//输出 false

Integer 比较更丰富的一个例子:

  Integer i1 = 40;Integer i2 = 40;Integer i3 = 0;Integer i4 = new Integer(40);Integer i5 = new Integer(40);Integer i6 = new Integer(0);System.out.println("i1=i2   " + (i1 == i2));System.out.println("i1=i2+i3   " + (i1 == i2 + i3));System.out.println("i1=i4   " + (i1 == i4));System.out.println("i4=i5   " + (i4 == i5));System.out.println("i4=i5+i6   " + (i4 == i5 + i6));System.out.println("40=i5+i6   " + (40 == i5 + i6));

结果:

i1=i2   true
i1=i2+i3   true
i1=i4   false
i4=i5   false
i4=i5+i6   true
40=i5+i6   true

解释:
语句 i4 == i5 + i6,因为+这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。然后 Integer 对象无法与数值进行直接比较,所以 i4 自动拆箱转为 int 值 40,最终这条语句转为 40 == 40 进行数值比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode45.Jump-Game-II<跳跃游戏II>

题目&#xff1a; 思路&#xff1a; 从上次大神那里获得的灵感 这题问的是次数,那么我们需要确保 1,能否跳到终点 2,得到次数. 第一次条获得的是nums[0],那么第一个数就是我们第一次能跳跃的范围.每次在范围里获得最大值.并且次数加一.然后进入下一次范围;即可得到次数; 代码…

明晚直播:可重构计算芯片的AI创新应用分享!

大模型技术的不断升级及应用落地&#xff0c;正在推动人工智能技术发展进入新的阶段&#xff0c;而智能化快速增长和发展的市场对芯片提出了更高的要求&#xff1a;高算力、高性能、灵活性、安全性。可重构计算区别于传统CPU、GPU&#xff0c;以指令驱动的串行执行方式&#xf…

丑数的求解

题目描述 我们把只包含质因子 2、3 和 5 的数称作丑数&#xff08;Ugly Number&#xff09;。求按从小到大的顺序的第 n 个丑数。 示例: 输入: n 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 算法思想 由题意可知一个丑数可以通过另一个丑数 * 2 …

一些关于设计原理和设计模式的问题

1.请解释一下单一职责原则&#xff08;SRP&#xff09;是什么&#xff0c;为什么它在软件设计中很重要&#xff1f; 2.能否举一个您在项目中应用开放封闭原则&#xff08;OCP&#xff09;的例子&#xff0c;并解释一下为什么该原则对于软件扩展很重要&#xff1f; 3.依赖倒置…

论文解读|Struck算法:基于结构化输出预测的自适应视觉目标跟踪框架

原创 | 文 BFT机器人 01 背景 本文的背景是关于自适应视觉目标跟踪的研究。在传统的跟踪方法中&#xff0c;通常采用基于检测的方式&#xff0c;即尝试学习一个分类器来区分目标对象和其周围的背景。然而&#xff0c;这种方法存在一些问题&#xff0c;例如需要手动选择特征和参…

深度神经网络基础——深度学习神经网络基础 Tensorflow在深度学习的应用

目录 一、二、Tesnsflow入门 & 环境配置 & 认识Tensorflow三、线程与队列与IO操作神经网络基础知识1.简单神经网络2.卷积神经网络卷积层新的激活函数-Relu池化层(Pooling)计算 案例&#xff1a;Mnist手写数字图片识别卷积网络案例 一、二、Tesnsflow入门 & 环境配置…

Unity facebook分享链接跳转app

facebook分享链接跳转app ##技术点分析 1、运用Android的深度链接技术实现。 安卓深度链接&#xff1a; https://developer.android.com/training/app-links/deep-linking 在安卓工程中的AndroidMainfest.xml配置&#xff0c;添加自定义的scheme&#xff0c;需要将intent-fil…

SQL AND OR 运算符

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。 如果第一个条件和第二个条件都成立&#xff0c;则 AND 运算符显示一条记录。 如果第一个条件和第二个条件中只要有一个成立&#xff0c;则 OR 运算符显示一条记录。 下面是选自 "students" 表的数据&a…

java 支持jsonschema

入参校验产品化 schema_xsd可视化编辑器_个人渣记录仅为自己搜索用的博客-CSDN博客 jsonchema的生成 支持v4的jackson-jsonSchema GitHub - mbknor/mbknor-jackson-jsonSchema: Generate JSON Schema with Polymorphism using Jackson annotations jackson-module-jsonSchema …

yolov5 C++推理(libtorch和onnxruntime框架)

libtorch推理 #include <iostream> #include <algorithm> #include <opencv2/opencv.hpp> #include <torch/script.h> #include <torch/torch.h>std::vector<torch::Tensor> non_max_suppression(torch::Tensor preds, float score_thres…

网络专线如何改成SDWAN?

将网络专线改成SDWAN涉及一系列步骤和决策。下面是一个概括的指南&#xff0c;帮助您了解如何将网络专线迁移到SDWAN。 1.需求分析&#xff1a;首先&#xff0c;您需要对现有网络专线的性能、需求和限制进行全面分析。了解各个分支机构的带宽需求、网络延迟、丢包率以及关键应…

阿里云NVIDIA A100 GPU云服务器性能详解及租用费用

阿里云GPU服务器租用费用表包括包年包月、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折&#xff0c;阿里云百科分享阿里云GPU服务器租用表、GPU一个小时多少…

各种知名游戏的技术分析

介绍一个GitHub&#xff0c;里面包括了市面上的各种游戏的技术分析&#xff0c;包括渲染管线、工作流、技术文章等等&#xff0c;在做某个类型的游戏的时候&#xff0c;可以针对某个游戏去进行技术参考&#xff0c;特别实用。 GitHub - OTFCG/Awesome-Game-Analysis: a compre…

C++那些事之template disambiguator

template disambiguator 1.背景 最近看到一段代码&#xff1a; auto chunk_left first_sort_key.template GetChunk<ArrayType>(left); 请问&#xff0c;这里的.template代表什么意义&#xff1f; 本节将从实际例子出发&#xff0c;探讨这个意义。 2.template disambigu…

数仓学习---16、可视化报表(Superset)

星光下的赶路人star的个人主页 真正的才智是刚毅的志向 文章目录 1、Superset入门1.1 Superset概述1.2 环境说明 2、Superset安装2.1 安装Python环境2.1.1 安装Miniconda2.1.2 创建Python3.7 环境 2.2 Superset部署2.2.1 安装依赖2.2.2 安装Superset2.2.3 启动Superset2.2.4 Su…

【ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets】

文章目录 Trace protocolpacket的种类Error packetsVERSION Packets同步 packet 上篇文章&#xff1a;ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用 下篇文章&#xff1a;ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介绍 及STM DMA 传输介绍 Trac…

WPF实战学习笔记13-创建注册登录接口

创建注册登录接口 添加文件 创建文件 MyToDo.Api ​ ./Controllers/LoginController.cs ​ ./Service/ILoginService.cs ​ ./Service/LoginService.cs MyToDo.Share ./Dtos/UserDto.cs LoginController.cs using Microsoft.AspNetCore.Mvc; using MyToDo.Api.Context;…

vue-pdf 单列显示多个pdf页面

<template><div><pdfv-for"i in numPages":key"i":src"src":page"i"style"display: inline-block; width: 100%"></pdf> <!-- 宽度设置100% 一行只展示一页 --></div> </template&g…

【uni-app2.0】实现登录页记住密码功能

使用uni-app的uni.setStorageSync()和uni.getStorageSync()方法来存储和读取密码 在登录页中添加一个记住密码的u-checkbox选项&#xff0c;并在data里面添加一个rememberPwd的布尔值&#xff0c;在每次点击记住密码change的时候来记录用户的选择 <u-checkbox-group place…

基于java的坦克大战游戏的设计与实现--毕业论文--【毕业论文】

文章目录 本系列校训毕设的技术铺垫文章主体层次摘要&#xff1a;示例摘要的写法 引言&#xff1a;系统分析总体设计总体功能总体功能如图1所示坦克大战总体流程图 详细设计游戏测试结论参考文献参考文献 配套资源 本系列校训 互相伤害互相卷&#xff0c;玩命学习要你管&#…