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

【从零开始java学习|第三篇】变量与数据类型的关联

目录

一、数据类型分类

二、基本数据类型:四类八种

2.1 整数型(4 种:byte、short、int、long)

2.2 浮点型(2 种:float、double)

2.3 字符型(1 种:char)

2.4 布尔型(1 种:boolean)

三、引用数据类型:地址的容器

3.1 常见引用类型

3.2 与基本类型的关键区别

四、变量的使用场景与操作方式

4.1 为什么需要变量?(使用场景)

4.2 变量的 3 大核心用法

五、变量的注意事项

5.1 变量同一时刻只能存一个值

5.2 同作用域内,变量名不能重复

5.3 一条语句可定义多个同类型变量

5.4 使用变量前必须赋值

六、数据类型与变量的绑定关系

七、取值范围的深层逻辑与实践

7.1 范围排序解析(用户小结要点)

7.2 byte 范围的本质(-128 ~ 127)

7.3 实践避坑:类型选择与溢出

八、总结:变量与数据类型的协同逻辑

一、数据类型分类

Java 的数据类型分为 两大阵营,直接决定 变量的存储规则

类型存储内容内存表现示例类型
基本数据类型直接存储值本身栈内存直接存值byteintcharboolean 等
引用数据类型存储对象的内存地址栈存地址,堆存实际对象String、数组、类、接口等

二、基本数据类型:四类八种

基本数据类型细分为 4 类 8 种,每类都有严格的 字节大小、取值范围,直接影响变量能存储的数据范围:

2.1 整数型(4 种:byteshortintlong

作用:存储整数(无小数部分的值)。

类型字节数取值范围示例(变量定义)
byte1 字节-128 ~ 127-2⁷ ~ 2⁷-1byte age = 20;
short2 字节-32768 ~ 32767-2¹⁵ ~ 2¹⁵-1short score = 950;
int4 字节-2¹⁴⁷⁴⁸³⁶⁴⁸ ~ 2¹⁴⁷⁴⁸³⁶⁴⁷int population = 100000;
long8 字节-2⁶³ ~ 2⁶³-1long money = 10000000000L;(需加L
2.2 浮点型(2 种:floatdouble

作用:存储小数(支持科学计数法,范围比整数型更 “极端”)。

类型字节数取值范围(近似)示例(变量定义)
float4 字节±3.4e-38 ~ ±3.4e38float pi = 3.14F;(需加F
double8 字节±1.7e-308 ~ ±1.7e308double price = 9.99;
2.3 字符型(1 种:char

作用:存储单个字符(如字母、符号、中文,本质是 Unicode 编码)。

类型字节数取值范围示例(变量定义)
char2 字节0 ~ 65535char gender = 'M';
char chinese = '中';(Unicode 支持)
2.4 布尔型(1 种:boolean

作用:存储逻辑值(仅 true / false)。

类型字节数取值范围示例(变量定义)
boolean1 字节true / falseboolean isLogin = true;

三、引用数据类型:地址的容器

核心特点:变量存储的是对象在堆内存的地址,而非值本身。

3.1 常见引用类型
  • 字符串String name = "Alice";name 存的是字符串对象的地址)。
  • 数组int[] scores = {90, 85};scores 存数组的地址)。
  • 自定义类 / 接口Student stu = new Student();stu 存 Student 对象的地址)。
3.2 与基本类型的关键区别
对比项基本类型引用类型
存储内容值本身对象的地址
默认值如 int 是 0boolean 是 falsenull(无地址,未指向任何对象)
内存位置栈内存栈存地址,堆存对象

四、变量的使用场景与操作方式

4.1 为什么需要变量?(使用场景)
  • 场景 1:重复使用某个值
    若数据需多次调用(如圆周率 3.14),用变量存储可避免重复写字面量,提升代码复用性。

    double pi = 3.14;  
    double area1 = pi * 2 * 2; // 计算半径2的圆面积  
    double area2 = pi * 5 * 5; // 计算半径5的圆面积  
    
  • 场景 2:数据动态变化
    若数据会更新(如用户分数、商品库存),变量可灵活记录变化。

    int stock = 100; // 初始库存  
    stock = 80;      // 库存减少(数据变化)  
    
4.2 变量的 3 大核心用法
  • 用法 1:输出打印
    将变量的值展示到控制台,用于调试或结果展示。

    int score = 95;  
    System.out.println("你的分数:" + score); // 输出:你的分数:95  
    
  • 用法 2:参与计算
    变量作为运算 “原料”,支持数学计算、逻辑判断等。

    int a = 10, b = 20;  
    int sum = a + b; // 变量参与加法运算  
    System.out.println("和:" + sum); // 输出:和:30  
    
  • 用法 3:修改值(覆盖旧数据)
    变量的值可动态更新,新值会覆盖旧值。

    int level = 1;  
    level = 2; // 旧值 1 被覆盖,level 变为 2  
    

五、变量的注意事项

5.1 变量同一时刻只能存一个值

新赋值会覆盖旧值,变量始终保存最后一次赋值的结果

int num = 10;  
num = 20; // 旧值 10 被覆盖,num 最终为 20  
5.2 同作用域内,变量名不能重复

若重复定义同名变量,编译器会报错(“变量已存在”)。

int age = 20;  
// int age = 30; // 错误!age 已存在  
5.3 一条语句可定义多个同类型变量

语法:数据类型 变量1=值1, 变量2=值2;(类型必须一致)。

// 正确:int 类型的 x 和 y  
int x = 1, y = 2;  
// 错误:String 和 int 类型不同,不能同语句定义  
// String name="Tom", age=20;  
5.4 使用变量前必须赋值

未赋值的变量无法使用(Java 会编译报错,避免空数据错误)。

int num;  
// System.out.println(num); // 错误!num 未赋值  
num = 10; // 先赋值,再使用  
System.out.println(num); // 正确:10  

六、数据类型与变量的绑定关系

变量的定义 必须指定数据类型,类型直接决定:

  1. 能存什么值int 变量只能存整数,String 变量只能存字符串地址。
  2. 占多少内存byte 占 1 字节,double 占 8 字节。

示例

// 步骤1:指定类型 → int(4字节,存整数)
int num;  
// 步骤2:赋值 → 必须符合类型规则(此处存整数100)
num = 100;  // 错误示例:类型不匹配  
// num = 3.14; // 编译报错:double不能存到int变量  

七、取值范围的深层逻辑与实践

7.1 范围排序解析(用户小结要点)

规则double > float > long > int > short > byte
原因

  • 浮点型(float/double 用 科学计数法 存储(如 3.4e38),虽占字节少,但表示范围远大于整数型(如 long 最大约 9e18,远小于 float 的 3.4e38)。
  • 整数型 按字节数递增,范围自然扩大(byte 1 字节 < short 2 字节 < ... < long 8 字节)。
7.2 byte 范围的本质(-128 ~ 127)

byte 占 1 字节(8 位),最高位是 符号位(0 表示正数,1 表示负数):

  • 正数范围:00000000 ~ 01111111 → 0 ~ 1272⁷-1)。
  • 负数范围:10000000 ~ 11111111 → 用补码表示,实际对应 -128 ~ -1
7.3 实践避坑:类型选择与溢出
  • 选对类型,节省内存
    • 年龄(0~200)→ byte(1 字节),而非 int(4 字节)。
    • 金额(需精度)→ double 或 BigDecimal(避免浮点误差)。
  • 警惕溢出
    int maxInt = 2147483647;  
    // maxInt = maxInt + 1; // 溢出!结果变为 -2147483648(int范围超限)  
    long maxLong = 2147483648L; // 加L,用long存大数  
    

八、总结:变量与数据类型的协同逻辑

  1. 变量是 “容器”,数据类型是 “容器的规则”:规定容器能装什么值、占多少空间。
  2. 基本类型存值,引用类型存地址:前者直接操作值,后者操作对象的引用。
  3. 范围决定能力:选类型时,优先匹配数据的实际范围(如小数用浮点,大整数用long)。

如果我的内容对你有帮助,请点赞,评论,收藏。接下来我将继续更新相关内容!

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

相关文章:

  • 扣子空间深度解析
  • Apache 服务器基础配置与虚拟主机部署
  • CentOS 7.9 升级 GLibc 2.34
  • (C++)继承全解析及运用
  • Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)
  • 教程 | 用Parasoft SOAtest实现高效CI回归测试
  • Day02——Docker
  • 一体化步进伺服电机在无人机舱门应用中的应用案例
  • 书籍数组中未出现的最小正整数(8)0812
  • 小白挑战一周上架元服务——ArkUI04
  • Ubuntu与Rocky系统安装Java全指南
  • C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
  • 深入理解数据库架构:从原理到实践的完整指南
  • 力扣47:全排列Ⅱ
  • ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及测试(二)
  • Linux内核编译ARM架构 linux-6.16
  • 深度贴:前端网络基础及进阶(3)
  • archlinux中VLC无法播放视频的解决办法
  • Linux TC流控实现机制
  • MySQL——MySQL引擎层BufferPool工作过程原理
  • leetcode3258:统计满足K约束的子字符串数量Ⅰ(变长滑动窗口详解)
  • Tricentis Tosca 2025.1 LTS 系统要求
  • Java 中 Set 接口详解:知识点与注意事项
  • Day50--图论--98. 所有可达路径(卡码网),797. 所有可能的路径
  • Javase 之 字符串String类
  • Python 多进程及进程间通信
  • C++实现LINGO模型处理程序
  • 杰里常用功能API
  • Navicat更改MySql表名后IDEA项目启动会找原来的表
  • 腾讯codebuddy.ai 安装实测【从零开始开发在线五子棋游戏:完整开发记录】