当前位置: 首页 > 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.dtcms.com/a/327823.html

相关文章:

  • 秋招笔记-8.9
  • 【网络运维】Linux和自动化: Ansible基础实践
  • SynAdapt:通过合成连续思维链实现大语言模型的自适应推理
  • 机器学习第十课之TF-IDF算法(红楼梦文本分析)
  • 服务器节点技术解析:从架构原理到家庭实践的全维度指南
  • 文件IO函数实现
  • 异或和查询
  • 【报错处理】mount: /boot/efi: unknown filesystem type ‘LVM2_member‘.
  • ARM基础概念 异常处理01 day52
  • 前端项目一键换肤
  • Web 服务详解:HTTP 与 HTTPS 配置
  • SuperMap GIS基础产品FAQ集锦(20250804)
  • Java 中 Set 接口详解:知识点与注意事项
  • LangChain SQLChatMessageHistory:SQL数据库存储聊天历史详解
  • Day05 店铺营业状态设置 Redis
  • MQTTX使用wss的连接报错
  • Java -- List接口方法--遍历--ArrayList的注意事项
  • 贪心----4.划分字母区间
  • 方格网法土方计算不规则堆体
  • [ 前端JavaScript的事件流机制 ] - 捕获、冒泡及委托
  • 少数民族文字OCR识别技术实现及应用场景剖析
  • JMeter并发测试与多进程测试
  • __base__属性
  • ETCD的简介和使用
  • 42.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(一)
  • 1513-map 的三种声明定义方式 使用方式
  • BN层:深度学习中的“数据稳定器”,如何解决训练难题?
  • 基于C#的二手服装交易网站的设计与实现/基于asp.net的二手交易系统的设计与实现/基于.net的闲置物品交易系统的设计与实现
  • 嵌入式Linux学习 -- 软件编程3
  • UNet改进(32):结合CNN局部建模与Transformer全局感知