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

2.4 Java的基础概念(数据类型)

一、什么是数据类型?

在 Java 中,数据类型决定了三件事:

  1. 存什么:变量能存储的数据种类(是整数、小数还是文字?)。
  2. 占多大:在内存中占用多少空间(字节数)。
  3. 怎么算:支持哪些操作(如加减运算、逻辑比较)。

Java 是强类型语言。所有变量必须先声明类型,且类型一旦确定,通常不能随意改变。


二、Java 数据类型的分类

Java 的数据类型主要分为两大类:基本数据类型引用数据类型

Data Types(数据类型)
/ \
Primitive Types(基本/原始类型) Reference Types(引用类型)

graph TD A[Data Types 数据类型] --> B(Primitive Types 基本类型) A --> C(Reference Types 引用类型)

1. 基本数据类型(Primitive Types)

8 种,直接存储值本身,效率极高,通常存储在**栈(Stack)**内存中。

分类类型关键字字节取值范围/说明默认值
整数型byte1-128 ~ 1270
short2-32,768 ~ 32,7670
int4约 ±21亿 (-2³¹ ~ 2³¹−1)0
long8约 ±9.2×10¹⁸0L
浮点型float4单精度 (6~7位有效数字)0.0f
double8双精度 (15~16位有效数字)0.0
字符型char20 ~ 65,535 (Unicode 编码)'\u0000'
布尔型boolean未定义true/falsefalse
  • Long:字面量必须加Ll(建议大写 L,避免与数字 1 混淆)。
  • Float:字面量必须加Ff
  • Double:Java 默认的浮点类型,不加后缀即为 double。
long bigNum = 1234567890123L; float price = 19.99f; // 不加 f 会报错,因为默认是 double

2. 引用数据类型(Reference Types)

存储的是对象的引用(内存地址),实际对象存储在**堆(Heap)**内存中。

  • 类(Class):如String,Scanner, 自定义类。
  • 接口(Interface):如List,Runnable
  • 数组(Array):如int[],String[]
  • 枚举(Enum)
String name = "Alice"; // name 是引用,指向堆中的对象 int[] nums = new int[5]; // nums 是数组引用

三、基本类型 vs 引用类型

特性基本类型引用类型
存储内容实际数值对象的内存地址
存储位置栈(Stack)引用在栈,对象在堆
默认值0, false, '\u0000'null
是否有方法有(如.length()
内存开销小,高效相对较大

四、字面量(Literals)

字面量是直接写在代码中的常量值。

类型字面量示例说明
整数42,0b101默认是int
长整数100L必须带L
浮点数3.14默认是double
单精度3.14f必须带f
字符'A','\n'单引号,只能存一个字符
字符串"Hello"双引号,属于引用类型
布尔true,false仅两个值

五、类型转换(Type Conversion)

1. 自动类型提升(Widening)

小范围 → 大范围,安全,自动完成。

  • 顺序byteshortintlongfloatdouble
  • 特例charint
int a = 100; double d = a; // 自动转为 100.0

2. 强制类型转换(Narrowing)

大范围 → 小范围,可能丢失精度,需显式转换。

  • 语法(目标类型) 变量名
double x = 123.456; int n = (int) x; // 结果:123(直接截断小数,不四舍五入!)

布尔类型(boolean)不能与其他任何类型进行转换!


六、包装类(Wrapper Classes)

Java 为每个基本类型提供了对应的类,主要用于集合(泛型)工具方法

基本类型包装类基本类型包装类
byteByteintInteger
shortShortlongLong
floatFloatdoubleDouble
charCharacterbooleanBoolean

自动装箱与拆箱(JDK 5+):

Integer num = 100; // 自动装箱:基本类型 -> 对象 int n = num; // 自动拆箱:对象 -> 基本类型

七、常见陷阱与最佳实践

1. 浮点数精度丢失

System.out.println(0.1 + 0.2); // 输出 0.30000000000000004 System.out.println(0.1 + 0.2 == 0.3); // false
  • 解决方案:涉及金额计算高精度要求时,必须使用BigDecimal

2. String 是引用类型

  • "abc"String对象,而'a'char基本类型。
  • 比较字符串内容请用.equals(),不要用==

3. char 是无符号的

  • char范围是0~65535,不能存储负数。

最佳实践建议

  • 默认选择:整数用int,小数用double
  • 大数处理:超出int范围再用long
  • 常量命名:使用static final+ 全大写。
    public static final double PI = 3.14159;

八、练习

public class TextData { public static void main(String[] args) { String name = "黑马谢广坤"; int age = 18; char sex = '男'; double height = 180.1; boolean flag = true; System.out.println("姓名为:" + name); System.out.println("年龄为:" + age); System.out.println("性别为" + sex); System.out.println("身高为:" + height); System.out.println("是否单身:" + flag); } }
http://www.cnnetsun.cn/news/1664889.html

相关文章:

  • 终极指南:3分钟实现Figma中文界面,设计师效率提升200%
  • 开源阅读鸿蒙版完整指南:打造你的专属数字图书馆
  • WarcraftHelper实战指南:四大核心问题诊断与优化方案
  • 终极指南:如何无需Steam客户端轻松下载创意工坊模组
  • FLUX.1-dev像素艺术生成实战:像素幻梦在RPG地图设计中的落地应用
  • 2026 科技大厂裁员真相:AI 不是借口
  • SEO_中小企业快速见效的SEO执行方案解析
  • day02-面向对象高级
  • 动漫头像秒变真人!AnythingtoRealCharacters2511零基础5分钟上手教程
  • 模拟与数字
  • 解决Dell G15散热烦恼:轻量级开源控制中心为游戏玩家打造的散热解决方案
  • 网盘直链下载助手:八大网盘真实链接一键获取,告别下载限速烦恼
  • Qwen3.5-9B-AWQ-4bit应用指南:电商商品图识别与描述实战
  • 【Python内存管理终极指南】:20年C Python源码深度解析,揭开GC、引用计数与内存池协同机制的黑盒
  • 5G时代边缘计算:万亿市场架构、场景落地与工程实现(上篇)上篇:核心理论与产业架构全解析
  • javaweb学生档案成绩签到管理系统设计与实现
  • 没有西装怎么拍正装证件照?证件照换正装教程
  • intv_ai_mk11效果惊艳:从‘写Python函数计算斐波那契’到‘生成Flask API完整项目’
  • OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备上的稳定运行方案
  • 智能工具如何提升碧蓝航线游戏效率:从重复操作中解放的实战指南
  • 3大核心优势+4类场景方案:Lenovo Legion Toolkit让游戏本性能释放提升30%
  • Elsevier Tracker终极指南:3分钟搞定学术论文审稿状态追踪
  • 从零开始掌握微分方程:同济高数第七章实战解析
  • 2025年苹果新规解读:你的AFNetworking、SDWebImage等老库如何手动添加隐私清单文件
  • EasyAnimateV5图生视频效果实测:RTX 4090D下49帧@1024p生成耗时分析
  • 通义千问2.5-7B-Instruct部署成本揭秘:GPU按需计费实战优化
  • 32位MCU轻量级OTA方案设计与实现
  • iDILI研究新路径|肝脏器官芯片联合PBMC解析单抗药物肝毒性机制【曼博生物-CNBIO器官芯片】
  • 5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80%
  • 数据提取与图表解析工具:WebPlotDigitizer 全面指南