当前位置: 首页 > news >正文

Java 数据类型

数据类型用于对数据归类,以便开发者理解和操作。

基本数据类型

Java 确定了每种基本数据类型所占存储空间的大小,不会像其它语言那样随机器硬件架构的变化而变化,这使 Java 程序更具可移植性。

Java 中定义了如下的基本数据类型。

byte

表示整数,取值范围 -2 ^ 7 ~ 2 ^ 7 - 1,占 8 个 bit 位,1 个字节。

byte beVar = 100;

short

表示整数,取值范围 -2 ^ 15 ~ 2 ^ 15 - 1,占 16 个 bit 位,2 个字节。

short stVar = 200;

int

表示整数,取值范围 -2 ^ 31 ~ 2 ^ 31 - 1,占 32 个 bit 位,4 个字节,整数字面量的默认类型。

int itVar = 300;

long

表示整数,取值范围 -2 ^ 63 ~ 2 ^ 63 - 1,占 64 个 bit 位,8 个字节。赋值时,如果超过了 int 类型的取值范围,需要在数值后面加 Ll

// 在 int 型的取值范围内时可用,不建议,最好加上 L
long lgVar1 = 400; // 赋值时,字面量后面要加 L 或 l
long lgVar2 = 400L;

float

表示单精度浮点数,取值范围 -3.4E ^ 38 ~ -1.4E ^ -45、1.4E ^ -45 ~ 3.4E ^ 38,E 表示以 10 为底的指数,占 32 个 bit 位,4 个字节。赋值时,需要在数值后面加 Ff,因为浮点数字面量的默认类型是 double

不能用于表示精确值,如货币等,此时应该使用 BigDecimal 对象类型。

float ftVar = 3.14F; // 浮点数默认类型是 double,必须加 F

double

表示双精度浮点数,取值范围 -1.7E ^ 308 ~ -4.9E ^ -324、4.9E ^ -324 ~ 1.7E ^ 308,E 表示以 10 为底的指数,占 64 个 bit 位,8 个字节,浮点数字面量的默认类型。

不能用于表示精确值,如货币等,此时应该使用 BigDecimal 对象类型。

double deVar1 = 3.14;
double deVar2 = 3.14E2; // 314.0
double deVar3 = 3.14E-2; // 0.0314

char

表示单个字符,可以是中文字符,Java 内部进行字符处理时,采用 unicode 编码方式,具体编码格式是 UTF-16BE(2 或 4 个字节),取值范围 0 ~ 65535,占 16 个 bit 位,2 个字节,本质是一个无符号正整数(没有符号位),对应 unicode 编号。

char 只能表示 unicode 编号在 0 ~ 65535 的字符,超出范围的字符将使用两个 char 表示。

char 的字面量使用单引号 '' 括起来。

char crVar1 = 'A';
char crVar2 = '光';
char crVar3 = 97; // char 的本质就是无符号正整数
char crVar5 = 0x9a6c;
char crVar5 = '\u0000'; // unicode 编码

转义字符

在字符前面 \ 可以改变字符原来的含义,比如 ‘\0’、‘\t’ 等。

转义字符含义
\n换行
\r回车
\0结束字符
\s空格
\’单引号
\"双引号
\\反斜杠
\b退格符

boolean

表示真假值,取值为 truefalse,至于占用的空间,得看 JVM 的具体实现。

void

表示无数据,用在方法上,表示没有返回值。

⭐基本数据类型转换

在 Java 中,声明变量时需要指定数据类型,JVM 会根据数据类型申请相应的内存空间,分配的空间只能存储该类型的数据。如果赋值的数据类型和声明的数据类型不一致,则需要进行数据类型转换。

image.png

boolean 类型与其他7种类型的数据都不能进行转换,char 类型不支持自动转换成它,只支持强制转换。

自动转换

自动转换是隐式的,取值范围从小到大,可以直接转换,转换时会进行扩宽(widening conversion)。因为较大的类型(如 int)要保存较小的类型(如 byte),取值范围是足够的,不需要强制转换。

强制转换

强制转换是显式的,取值范围从大到小,必须强制转换,转换时会进行缩小(narrowing conversion)。

强制转换可能会损失精度。整数类型之间相互转换,如果整数超出目标类型范围,会对目标类型的范围取余数;从浮点类型转成整数类型,会发生截尾(truncation),也就是把小数部分去掉,只留下整数部分,且如果整数部分超出目标类型范围,一样将对目标类型的范围取余数。

// 实例
long lo = 99;
int i = (int) lo;

隐式转换

/*1、多类型混合运算时,会自动转成容量最大的数据类型,再进行计算,并返回相应类型的结果对于整数来说,如果没有 long 型,则提升至 int 型(不管有没有 int 型变量参与)2、在取值范围内时,整数字面量(int 型)赋值给 byte、short、char 时会自动转换3、在取值范围内时,常量和字面量的运算结果赋值给 byte、short、char 时会自动转换,有变量时就要强转4、赋值运算(+=、-=、...)会自动进行强转5、`char` 的运算是按 Unicode 编号进行的,在进行算术运算时会转换为 `int` 类型*/byte a = 100; 
// a + 1 运算提升至 int 型,值在 byte 的取值范围内,但由于是变量和字面量运算,编译时不会优化,需要手动强转
byte b = a + 1; final byte c = 100;
// c + 1 运算提升至 int 型,值在 byte 的取值范围内,且是常量和字面量运算,编译时会优化,不需要手动强转
byte d = c + 1; // 100 + 1 运算提升至 int 型,值在 byte 的取值范围内,且是字面量和字面量运算,编译时会优化,不需要手动强转
byte f = 100 + 1; 

对象数据类型

Java 是面向对象的语言,除了基本数据类型,其他都是对象数据类型,比如字符串、数组等。

  • 类:class
  • 接口:interface
  • 数组:[](数组有个类 Array)

对象是什么?简单来说,对象可以理解为基本数据、其它对象数据的组合。比如一个人,他的姓名是一个字符串,年龄是一个整数。

对象数据类型同样存在类型转换。

http://www.lryc.cn/news/28034.html

相关文章:

  • Prometheus 监控云Mysql和自建Mysql(多实例)
  • Vue3中的h函数
  • 阿尔法开发板 IMX6ULL 说明
  • Altium Designer19 #学习笔记# | 基础应用技巧汇总
  • Python 元类编程实现一个简单的 ORM
  • 《C++ Primer Plus》第18章:探讨 C++ 新标准(7)
  • Redis学习(二):Redis安装测试
  • Vector - CAPL - 简介及数据结构
  • 20230304英语学习
  • 【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
  • 【自用】SpringBoot项目通用类整理
  • 动态规划法(总述)多阶段决策最优化问题
  • MySQL跨服务器数据映射
  • 利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)
  • 1.2 CSS文本属性
  • SpringCloud之认识微服务
  • 【go语言之thrift协议二之server端分析】
  • 【办公类05-03】Python批量修改文件名前面的序号(已有的序号错了,需要改成正确的号码)
  • 定向模糊测试工具Beacon基本用法
  • 《程序员面试金典(第6版)》面试题 02.01. 移除重复节点
  • 如何对web系统开展无障碍测试
  • 使用vite+vue3.0 创建一个cesium基础应用 ----01 项目搭建
  • 【Python学习笔记】第二十七节 Python 多线程
  • 【id:18】【20分】B. DS顺序表--连续操作
  • vi编辑器操作指令分享
  • OSPF与BFD联动配置
  • jQuery基础
  • day39|139.单词拆分 背包问题ending
  • Shell脚本编程
  • ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码