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

Java学习——数据类型

目录

一、概述

二、基本数据类型

1、数值型

2、字符型

3、布尔型

三、引用数据类(后期补充)

1、类

2、接口

3、数组

4、枚举

5、注解

四、数据类型转换

1、概述

2、隐式转换(自动类型转换)

3、显式转换(强制类型转换)

4、特殊类型转换场景

五、获取用户端输入

1、final关键字

2、Scanner类


一、概述

Java 的数据类型分为两大类:基本类型(primitive type)引用类型(reference type)

基本类型:包括 `byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean` 共 8 种,它们直接存储数值或布尔值,效率高且内存占用固定

引用类型:包括类、接口、数组以及 `null` 字面量,它们存储的是对象的引用(内存地址),可以动态创建并通过 `new` 关键字实例化。理解这两种类型的区别(值传递 vs. 引用传递)是掌握 Java 内存管理和编程基础的关键。

二、基本数据类型

1、数值型

整数型变量

Java 中整数型数据变量用于存储整数值,共有 4 种不同的整数类型:byteshortintlong。它们的主要区别在于内存大小(1字节=8位)取值范围

类型占用空间取值范围用途
byte1 字节-128 ~ 127节省内存,处理小范围整数
short2 字节-32768 ~ 32767较少使用,适用于特定场景的整数存储
int4 字节-2³¹ ~ 2³¹-1最常用的整数类型,默认的整数字面量类型
long8 字节-2⁶³ ~ 2⁶³-1存储大范围整数

*在实际应用过程中,应考虑内存占用选取合适的数据类型*

  • 程序中整数类型的数据,一般默认为int型
  • long型数据,在表示时需要后缀加上 L 或 l
long num1 = 12345678987L;

浮点型变量

在 Java 中,浮点型变量用于存储小数或科学计算数值,主要分为float(单精度,4 字节)和double(双精度,8 字节)两种。

类型占用空间取值范围精度范围用途
float4 字节1.4e-45 ~ 3.4028235e386 - 7 位小数节省内存的浮点数
double8 字节4.9e-324 ~ 1.7976931348623157e308

15 位小数

适用于高精度计算
  • float型数据,在表示时需要后缀加上F 或 f
  • float结构:1 位符号位 + 8 位指数位 + 23 位尾数位

float num01 = 3.14F;
  • double型数据,在表示时需要后缀加上D 或 d (选加,可省略)
  • double结构:1 位符号位 + 11 位指数位 + 52 位尾数位

注意事项:

  • 浮点型支持常规数学运算(加减乘除),但不准确有误差
  • 浮点型数据之间也不宜直接进行比较

补充:

  • 浮点数中的 E 和 e 表示科学计数法的十进制指数
  • 负数范围与正数对称
  • 浮点类型还包含正无穷负无穷NaN(非数值)等特殊值
  • 实际存储遵循 IEEE 754 标准


2、字符型

在 Java 中,字符型使用char关键字表示,用于存储单个字符,采用Unicode编码

链接:Unicode编码表

基本参数

  • 大小:16 位(2 字节)
  • 取值范围:\u0000(0)到\uffff(65535),即 Unicode 字符集的 0~65535 编码
  • 默认值:'\u0000'(空字符)

赋值方式

char ch1 = 'A'; // 直接赋值字符 char ch2 = 65; // 十进制ASCII值,等价于'A' char ch3 = '\u0041'; // Unicode编码,等价于'A'

字符与整型的转换

字符型可隐式转换为整型(如int),反之需要显式类型转换:

int code = 'A'; // 结果为65 char ch = (char) 66; // 结果为'B'

注意事项

  • 不能为负数char是无符号类型,赋值负数会编译错误

  • 不能表示单个字节:如果需要 8 位字节,使用byte类型

  • int兼容char可以自动提升为int(如参与算术运算),但int赋值给char需要强制类型转换(除非是常量且范围合适)


转义字符
Java支持常见转义字符,如:

转义符含义Unicode值
\n换行符(LF)\u000A
\t水平制表符(Tab)\u0009
\r回车符(CR)\u000D
\b退格符\u0008
\f换页符\u000C
\\反斜杠自身\u005C
\'单引号\u0027
\"双引号\u0022
\0空字符(NULL)\u0000

字符串与字符
字符可通过String类的方法处理:

String str = "Java"; char firstChar = str.charAt(0); // 获取第一个字符'J'

字符的Unicode处理

Java支持Unicode补充字符(如emoji),需注意某些方法可能不兼容:

char highSurrogate = '\uD83D'; // 高代理项 char lowSurrogate = '\uDE00'; // 低代理项 String emoji = highSurrogate + "" + lowSurrogate; // 组合成"🐀"

注意事项

  • 字符型默认值:\u0000(空字符)
  • 比较字符时直接使用关系运算符(如==
  • 处理多语言时需确保编码一致性(如UTF-8)
  • 字符串与字符的区别"A"String类型(引用类型),'A'char类型(基本类型)

3、布尔型

Java 中的布尔型使用boolean关键字表示,用于逻辑运算和条件判断。

基本参数

  • 取值:仅两个字面量true(真)或false(假)

  • 存储大小:Java 规范未明确定义,通常虚拟机实现中boolean至少占 1 个字节(或 1 位,但数组时可能用 byte 模拟)

  • 默认值false

注意事项

  • 不能与整数互转:Java 中boolean不参与任何数值类型转换(不像 C 语言中用 0/1 代表 false/true)

  • 包装类Boolean,可自动装箱拆箱

  • 内存占用参考:单个boolean变量在 HotSpot VM 中通常占用 1 字节;boolean[]中每个元素占用 1 字节(可通过-XX:+UseCompressedOops等影响)

  • 适用场景:标志位、条件开关、逻辑运算结果


三、引用数据类(后期补充)

1、类

2、接口

3、数组

4、枚举

5、注解


四、数据类型转换

1、概述

Java数据类型转换分为隐式转换(自动类型转换)显式转换(强制类型转换)

  • 隐式转换:由编译器自动完成,通常发生在小范围数据类型大范围数据类型转换时;
  • 显式转换:需要手动指定,可能伴随精度损失或数据溢出

2、隐式转换(自动类型转换)

当满足以下条件时,Java会自动进行类型转换:

  • 数据类型兼容:如整型与浮点型之间。
  • 目标类型范围更大:例如intlongfloatdouble

常见隐式转换顺序
byte → short → int → long → float → double
char → int(字符可隐式转为整型)

示例代码

int numInt = 100; long numLong = numInt; // 自动转换 double numDouble = numLong; // 自动转换

3、显式转换(强制类型转换)

当需要将大范围数据类型转为小范围类型时,需使用强制类型转换,语法为(目标类型)值

注意事项

  • 精度损失:如doubleint会丢弃小数部分。
  • 数据溢出:如longint可能超出int范围。

示例代码

double numDouble = 100.56; int numInt = (int) numDouble; // 结果为100,丢失小数部分 long bigNum = 2147483648L; int smallNum = (int) bigNum; // 可能溢出,结果为-2147483648

4、特殊类型转换场景

字符串与其他类型的转换

字符串转数值:

String str = "123"; int num = Integer.parseInt(str); double d = Double.parseDouble(str);

数值转字符串

int num = 456; String str = String.valueOf(num); String str2 = Integer.toString(num);

字符与整型的转换

char ch = 'A'; int ascii = (int) ch; // 获取ASCII值(65) int num = 97; char ch2 = (char) num; // 转为字符'a'

注意事项

  1. 布尔类型不参与转换boolean不能与数值类型互相转换。
  2. 包装类与基本类型:通过自动装箱/拆箱实现转换(如Integerint)。
  3. 精度控制:浮点数转整型时建议结合Math.round()处理四舍五入。

示例

double pi = 3.14159; int rounded = (int) Math.round(pi); // 结果为3

五、获取用户端输入

1、final关键字

修饰变量(使其变为常量,值不可修改)、修饰方法(不可被重写)、修饰类(不可被继承)。

double pi = 3.1415926; //pi可以被修改,此时为变量 final double PI = 3.1415926; //PI不可被修改,由变量改为常量

注意事项:

  • final修饰后的变量,最好改为大写字母以示区分
  • final修饰后的变量,不能读取键盘输入

2、Scanner类

Java 标准库中用于解析基本类型和字符串的简单文本扫描器,最常用于从键盘读取输入

基本用法

  • 导入 Scanner 类
  • 创建 Scanner 对象,绑定到标准输入流(键盘)
  • 读取不同类型的数据
import java.util.Scanner; //导入Scanner类 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象 System.out.print("请输入内容:"); String input = scanner.nextLine(); // 用用户键盘输入的内容,进行赋值 System.out.println("您输入的是:" + input); scanner.close(); // 关闭 Scanner } }

常用的其他用法

方法说明
nextInt()读取一个int
nextDouble()读取一个double
nextBoolean()读取一个boolean
next()读取下一个以空白符分隔的字符串
nextLine()读取整行(包含空格直到换行符)
hasNextInt()判断是否还有对应类型的输入(常用于循环)

注意事项

  • 混用nextXXX()nextLine()时,nextLine()可能会读取到遗留的换行符,需要额外调用一次scanner.nextLine()来“吃掉”它。

  • 关闭Scanner后不能再使用,且会关闭底层的System.in

http://www.jsqmd.com/news/595385/

相关文章:

  • 别再让YOLO的检测框丑哭你!手把手教你根据图片大小动态调整边框粗细(附Ultralytics源码修改)
  • SenseVoice Small效果展示集:10个真实场景音频转文字高清截图
  • MiniMax M2.7 优惠码
  • 小白也能用!M2FP多人人体解析服务一键部署教程
  • Unity中导入URDF模型实战:以TurtleBot3 Waffle Pi为例
  • 基于DSP28335的三电平PCS系统代码功能说明
  • 千问3.5-9B模型Visual Studio开发环境集成教程
  • Qwen3-Reranker-0.6B效果实测:轻量级模型重排序能力展示
  • 【人工智能训练师3级】考试准备(2026)二、实操题
  • Jimeng LoRA惊艳效果:同一LoRA版本在不同seed下风格稳定性测评
  • HTML中的分级标题标签
  • 2026年知名的伺服冲床/20吨伺服冲床/5吨伺服冲床值得信赖厂家推荐(精选) - 行业平台推荐
  • 告别S7.Net黑盒!零基础C#原生Socket手撕西门子S7协议,打造工业数据采集神器
  • Qwen3-ASR-1.7B全流程指南:硬件要求、软件配置与生产部署
  • Qwen3-TTS在VSCode中的开发调试技巧:从语音克隆到音色设计
  • GLM-4.1V-9B-Base部署指南:模型权重校验+SHA256完整性验证流程
  • 2026年知名的烟囱消音器/锅炉消音器/吹管消音器厂家选购完整指南 - 行业平台推荐
  • 从经典控制器到前沿控制的发展
  • HTML 基本骨架结构
  • 【西瓜带你学设计模式 | 第十三期 - 组合模式】组合模式 —— 树形结构统一处理实现、优缺点与适用场景
  • 未来之窗昭和仙君(八十八)东方仙盟神识FACLAW说明书—东方仙盟
  • 拓世AI决策系统白皮书
  • SEO_详解SEO优化的完整步骤与执行方案(496 )
  • C语言——结构体数组
  • 2026年评价高的自动高速冲床/精密高速冲床/高速冲床品牌厂家推荐 - 行业平台推荐
  • 内容创作者福音:梦幻动漫魔法工坊助力短视频动漫素材制作
  • AI模型推理服务化:基于StructBERT构建高并发微服务架构
  • PyTorch 2.8镜像智能助手:科研人员用预装Jupyter+Pandas快速分析训练指标
  • Zynq PS端I2C避坑指南:为什么你的读操作总是失败?
  • tao-8k应用案例:基于Xinference搭建文档检索系统,免配置快速集成