【2.Java基础】Java常量与变量-从基本类型到类型转换全面掌握 文章目录【Java基础】Java常量与变量从基本类型到类型转换全面掌握导入语1 ~ 标识符与关键字1.1 标识符1.2 关键字2 ~ 变量——存储数据的容器2.1 什么是变量生活中的类比2.2 变量的三要素2.3 变量声明的几种方式2.4 变量的命名推荐规范驼峰命名法3 ~ 数据类型一览3.1 Java 中的数据类型分类3.2 八种基本数据类型速查表4 ~ 整型字面值及变量声明4.1 整型的四种写法4.2 long 类型的声明4.3 整型变量赋值常见错误5 ~ 浮点型字面值5.1 float 和 double5.2 浮点数的科学计数法5.3 浮点数案例精度丢失问题6 ~ 字符型字面值6.1 char 类型6.2 常用转义字符7 ~ 布尔类型和字符串的字面值7.1 boolean 类型7.2 String 类型初识8 ~ 常量8.1 什么是常量8.2 为什么需要常量9 ~ 数据类型转换9.1 为什么需要类型转换9.2 自动类型转换隐式转换9.3 强制类型转换显式转换9.4 类型转换经典案例10 ~ 局部变量的存储方式10.1 变量存在哪11 ~ 常见编译运行错误思考 总结结尾【Java基础】Java常量与变量从基本类型到类型转换全面掌握文章简介本文是Java基础核心教程系统讲解Java中的标识符、关键字、八大基本数据类型整型/浮点型/字符型/布尔型、变量的声明与命名规范、常量的定义方式以及数据类型转换自动转换与强制转换的完整规则。全文配有完整代码示例和常见编译错误对照表适合刚写完HelloWorld、准备深入学习Java语法的初学者。 个人主页源码骑士❄专栏传送门《java编程练习题》《全栈开发》⭐️热衷从源码视角拆解技术底层原理将复杂架构讲得通俗易懂 源码骑士的简介5年Android Framework系统开发经验曾主导多项系统级性能优化专项技术栈覆盖Android系统全链路Binder/Handler/AMS/WMS/启动流程及Java后端全家桶Spring MyBatis Redis Oracle累计产出原创技术文章100篇文章以流程图为特色被读者评价为看一篇胜过啃一周源码导入语如果你已经成功跑通了 HelloWorld下一步要学的就是变量和数据类型。这部分相当于 Java 语法的基本词汇量——有了它你才能开始写真正的程序。很多初学者在这里栽跟头不是因为智商不行而是被一大堆名词整型字面值、浮点型、强制转换、自动转换给吓住了。其实这些概念只需要一点点拆解就能彻底搞懂。这篇文章只做一件事把你从 HelloWorld 阶段接出来用最直白的语言带你过完 Java 常量和变量的全部核心知识并且让每一种类型的声明和转换你都能自己写出来。1 ~ 标识符与关键字1.1 标识符标识符就是你给变量、方法、类取的名字。写 Java 代码的过程本质上就是不停地起名字。比如下面这段代码中加粗的部分全是标识符publicclassHelloWorld{// HelloWorld —— 类名publicstaticvoidmain(String[]args){// main —— 方法名 args —— 参数名intstudentAge20;// studentAge —— 变量名StringstudentName张三;// studentName —— 变量名}}标识符的命名规则硬性规定违反就编译报错规则示例✅ 正确示例❌ 错误由字母、数字、下划线_、美元符$组成age,studentNamestu-name含-不能以数字开头name1,_value1name数字开头不能是关键字myClassclassJava 关键字区分大小写age和Age是两个不同的标识符—命名没有长度限制但一般不建议太长。你写一个 50 个字符的变量名也能编译通过但谁看了都想打你。1.2 关键字关键字是 Java 语言本身保留的词汇你不能再拿它们来命名。Java 中的常见关键字初学先记住这些类别关键字初学阶段见到的频率类型声明class、interface、enum⭐⭐⭐访问修饰符public、private、protected⭐⭐⭐⭐⭐静态/抽象static、abstract、final⭐⭐⭐⭐数据类型int、double、char、boolean、void⭐⭐⭐⭐⭐控制语句if、else、for、while、return⭐⭐⭐⭐⭐包和导入package、import⭐⭐⭐⭐初学阶段不用背全部关键字列表写代码时如果 IDE 把你起的名字标红了大概率是撞了关键字。2 ~ 变量——存储数据的容器2.1 什么是变量生活中的类比变量就是内存中一块有名字的空间用来存数据。你用手机银行查余额余额 1000 存了一个整数 1000下个月发工资了余额变成 5000——数字变了但余额这个名字没变。这就是变量的本质名字不变值可以变。2.2 变量的三要素Java 中声明一个变量必须指定三样东西intage20;↑ ↑ ↑ 类型 名字 值要素说明示例数据类型决定这块内存能存什么整数小数文字int变量名符合标识符规则的名称age初始值一开始放进去的数据202.3 变量声明的几种方式// 方式一先声明再赋值intage;age20;// 方式二声明的同时赋值最常用intscore95;// 方式三一行声明多个同类型变量intx10,y20,z30;// 方式四一行声明分开赋值不推荐可读性差inta,b,c;a1;b2;c3;2.4 变量的命名推荐规范驼峰命名法Java 社区约定俗成的命名风格元素命名风格示例变量名首单词小写后面单词首字母大写驼峰studentName、maxValue类名每个单词首字母都大写帕斯卡HelloWorld、StudentManager常量名全大写单词间用下划线MAX_VALUE、PI方法名跟变量名一样小驼峰getName()、setAge()不按这个规范写不会报错但别人看你的代码会皱眉。团队协作时命名规范就是代码的门面。3 ~ 数据类型一览3.1 Java 中的数据类型分类Java 的数据类型分为两大类基本数据类型和引用数据类型。Java 数据类型 ├─ 基本数据类型八种 │ ├─ 整型byte / short / int / long │ ├─ 浮点型float / double │ ├─ 字符型char │ └─ 布尔型boolean └─ 引用数据类型 ├─ 类class ├─ 接口interface ├─ 数组array └─ String字符串3.2 八种基本数据类型速查表类型大小取值范围默认值示例byte1字节-128 ~ 1270byte b 100;short2字节-32768 ~ 327670short s 200;int4字节-21亿 ~ 21亿0int age 20;long8字节-9e18 ~ 9e180Llong l 100L;float4字节±3.4e-38 ~ ±3.4e380.0ffloat f 3.14f;double8字节±1.7e-308 ~ ±1.7e3080.0ddouble d 3.14;char2字节0 ~ 65535Unicode‘\u0000’char c A;boolean1位true/falsefalseboolean flag true;日常开发中整数用int小数用double字符用char判断用boolean。这四个就够了其他四种byte/short/long/float有特定场景才用。4 ~ 整型字面值及变量声明4.1 整型的四种写法Java 中整数默认是int类型。下面四种进制都可以用来表示整数inta100;// 十进制日常写法intb0144;// 八进制以 0 开头intc0x64;// 十六进制以 0x 开头intd0b01100100;// 二进制以 0b 开头JDK 7 以上支持// 四个变量值完全相等都是 100进制前缀构成字符示例十进制无0-9100八进制00-70144十六进制0x0-9, A-F0x64二进制0b0-10b011001004.2 long 类型的声明声明 long 类型需要在数字后加L或l推荐大写 L小写 l 容易看成 1longpopulation8000000000L;// 超过 int 范围必须加 Llongnormal100L;// 没超 int 范围但依然标注 L 更清晰4.3 整型变量赋值常见错误byteb1127;// ✅ 在 -128~127 范围内OKbyteb2128;// ❌ 编译报错超出 byte 范围inti12147483647;// ✅ int 最大值inti22147483648;// ❌ 编译报错超出 int 范围longl18000000000;// ❌ 编译报错数字默认是 int值本身超出 int 范围longl28000000000L;// ✅ 加 L 告诉编译器这是 long第三条很容易中招数字字面值默认是 int 类型如果写的数字超过了 int 的范围约 21 亿编译就直接报错跟左边写long无关。解决方案就是加L。5 ~ 浮点型字面值5.1 float 和 doubleJava 中小数默认是double类型。要声明 float 必须加f或F。doublepi3.141592653589793;// 默认 double不用加后缀floatpi23.14f;// 必须加 f否则编译报错类型大小精度有效数字后缀适用场景float4字节约 7 位f/F精度要求不高的场景double8字节约 15 位可不加日常开发首选日常编程默认用double就行float 主要用于内存敏感的场景比如嵌入式开发。Android 中对内存要求较高某些场景会用 float但初学阶段不必纠结。5.2 浮点数的科学计数法doubled11.2e3;// 1.2 × 10³ 1200.0doubled21.2e-3;// 1.2 × 10⁻³ 0.00125.3 浮点数案例精度丢失问题浮点数运算可能会产生精度丢失这是所有编程语言都有的问题由 IEEE 754 标准导致System.out.println(0.10.2);// 输出 0.30000000000000004不是 0.3System.out.println(1.0-0.9);// 输出 0.09999999999999998不是 0.1为什么十进制的小数在二进制中可能是无限循环小数只能用近似值存储。初学知道这回事就行后面学BigDecimal再解决精确计算的问题。日常开发中这点误差通常不影响使用。6 ~ 字符型字面值6.1 char 类型Java 中char占 2 个字节使用Unicode 编码可以表示中文等任何语言字符。charc1A;// 英文字母charc2中;// 中文字符Java 完全支持charc39;// 注意这是字符 9不是数字 9charc4\n;// 转义字符换行符charc5\u0041;// Unicode 表示法\u0041 Achar 使用单引号 一个 char 只能放一个字符。不要用双引号——那是 String 的地盘。6.2 常用转义字符转义字符含义常用场景\n换行输出多行文本\t制表符Tab对齐输出\\反斜杠本身文件路径\单引号在单引号内表示单引号\双引号在字符串内放双引号System.out.println(第一行\n第二行);// 输出// 第一行// 第二行System.out.println(文件路径C:\\Users\\源码骑士);// 输出文件路径C:\Users\源码骑士7 ~ 布尔类型和字符串的字面值7.1 boolean 类型Java 的 boolean 只有两个值true和false。不能像 C 语言那样用 0/1 代替。booleanflag1true;booleanflag2false;// ❌ 下面这些在 Java 中都是编译错误// boolean x 1;// boolean y 0;// 常用于条件判断booleanisStudenttrue;if(isStudent){System.out.println(享受学生优惠);}7.2 String 类型初识String 不是基本类型它是引用类型但因为它太常用了初学阶段可以把它当作能存一串文字的变量类型来理解。Stringname源码骑士;// 双引号Stringempty;// 空字符串不是 nullStringmessage你好name;// 用 拼接字符串String 用双引号 char 用单引号 。初学阶段最容易犯的错就是char c A;—— 编译直接报错。8 ~ 常量8.1 什么是常量常量就是用final关键字修饰的变量一旦赋值就不能再改。finaldoublePI3.1415926535;PI3.14;// ❌ 编译报错不能给 final 变量重新赋值对比变量常量声明方式int age 20;final int MAX_AGE 150;值能不能改✅ 可以多次赋值❌ 只能赋值一次命名规范小驼峰studentAge全大写MAX_AGE8.2 为什么需要常量场景一避免魔法数字// ❌ 没有常量——3.14 是什么为什么是 3.14doublearea3.14*radius*radius;// ✅ 有常量——一看就知道 PI 是圆周率finaldoublePI3.1415926535;doubleareaPI*radius*radius;场景二统一管理可配置的值finalintMAX_RETRY_COUNT3;finallongCONNECT_TIMEOUT5000;// 毫秒finalStringDEFAULT_ENCODINGUTF-8;把可能改动的值抽成常量集中管理是编程从能跑就行迈向可维护的标志。这也是 Framework 层源码中的标准做法。9 ~ 数据类型转换9.1 为什么需要类型转换因为 Java 是强类型语言——每个变量在声明时必须明确类型不同类型之间不能随便混用。intage20;doubleprice9.9;// age price 的结果是什么类型int 还是 double// 答案double —— 这就是自动类型转换System.out.println(ageprice);// 输出 29.99.2 自动类型转换隐式转换规则把小范围的类型赋值给大范围的类型时自动转换不会丢失数据。byte→short→int→long→float→double↑charbyteb10;intib;// ✅ byte → int自动转换不丢数据intx100;longyx;// ✅ int → long自动转换longm200L;floatnm;// ✅ long → float自动转换可能有精度损失注意long8字节→float4字节虽然是大范围→小范围的字节数变化但 float 的表示范围更大所以也是自动转换。不过这个转换可能导致精度损失。9.3 强制类型转换显式转换规则把大范围的类型赋值给小范围的类型时必须手动强制转换可能丢失数据。doublepi3.14159;intintPi(int)pi;// 强制转换小数部分被砍掉System.out.println(intPi);// 输出 3longbigNum130L;bytesmallNum(byte)bigNum;// 超过 byte 范围数据溢出System.out.println(smallNum);// 输出 -126溢出后环绕的结果强制转换语法目标类型 变量名(目标类型)原变量;// 示例doubled9.99;inti(int)d;// 9小数部分截断不是四舍五入9.4 类型转换经典案例publicclassTypeConvertDemo{publicstaticvoidmain(String[]args){// 案例一整数除法inta5;intb2;System.out.println(a/b);// 输出 2不是 2.5整数/整数整数System.out.println(5.0/2);// 输出 2.5只要有浮点数参与就是小数除法System.out.println((double)a/b);// 输出 2.5强制转换其中一个操作数// 案例二byte/short/char 运算时自动提升为 intbytex10;bytey20;// byte z x y; // ❌ 编译报错xy 的结果是 int 类型intzxy;// ✅ 必须用 int 接收// 案例三char 和 int 的互相转换charchA;intcodech;// char → int得到 Unicode 编码 65System.out.println(code);charnext(char)(ch1);// int → char 需要强制转换System.out.println(next);// 输出 B}}10 ~ 局部变量的存储方式10.1 变量存在哪当你在方法里声明一个变量时publicstaticvoidmain(String[]args){intage20;// 这个 age 存在哪里Stringname源码骑士;}这个age和name存在 JVM 的**栈内存Stack**中。方法执行完这些变量就自动释放了。内存区域存什么生命周期栈Stack局部变量、方法参数方法执行期间执行完就释放堆Heapnew创建的对象、数组由 GC 自动回收初学阶段不需要深究 JVM 内存模型知道局部变量在方法执行完就没了这个概念就够了。后面讲到面向对象时自然会深入理解。11 ~ 常见编译运行错误以下是根据教学 PDF 整理的初学阶段最高频的编译/运行错误编号错误现象错误原因解决方案1variable age might not have been initialized变量只声明没赋值就使用了声明时赋初始值2incompatible types: possible lossy conversion from double to int把大类型赋给小类型没加强制转换加(int)或用对应类型接收3integer number too large整数超过 int 范围~21亿加L后缀4unclosed character literalchar 用了双引号A改成单引号A5cannot assign a value to final variable X给 final 常量重新赋值去掉第二次赋值或去掉 final6bad operand types for binary operator 不同类型之间运算不兼容先做类型转换调试小贴士编译报错时看错误消息的第一个单词和行号绝大多数问题都能定位到。Java 的编译错误提示非常清晰比运行时错误好排查一百倍。思考 总结本文系统讲解了 Java 常量和变量的核心知识从标识符与关键字到八大基本数据类型再到类型转换核心要点总结如下标识符与关键字标识符就是给变量、方法、类起的名字命名规则是字母数字下划线不能数字开头不能是关键字。关键字是 Java 保留的词汇初学阶段主要记住public、static、class、int、double、boolean、void、if、for、return这些。变量的三要素类型 名字 值。声明方式有四种推荐声明同时赋值最简洁。命名遵循小驼峰规范studentName类名用大驼峰HelloWorld。八种基本数据类型整数用int小数用double字符用char单引号判断用boolean。小数默认 doublefloat 必须加f后缀整数默认 intlong 必须加L后缀。byte/short/long/float 四个日常用得少初学先掌握好 int/double/char/boolean。常量用final修饰一旦赋值不能改。常量命名全大写加下划线。用常量代替魔法数字是代码可维护性的基本要求。数据类型转换自动转换是从小范围到大范围安全不丢数据强制转换是从大范围到小范围必须写(类型)可能丢数据。整数除法默认得整数要得小数必须有一个操作数是浮点数。把上面的代码每一段都敲一遍、跑一遍用System.out.println()亲眼看看输出结果。变量和类型是接下来所有代码的地基地基打牢了后面讲条件判断、循环、面向对象的时候才不会反复回来翻答案。结尾各位小伙伴本文的内容到这里就全部结束了源码骑士在这里再次感谢您的阅读源码骑士 — Android Framework 全栈开发关注跟博主一起从源码视角深耕底层原理见证每一次成长❤️点赞让优质内容被更多人看见让知识传递更有力量⭐收藏把核心知识点存好在需要时随时查、随时用评论分享你的经验或疑问评论区一起交流避坑一键四连不要忘记给博主一键四连哦今日源码拆解达成️寄语技术之路难免有困惑但同行的人会让前进更有方向结语希望对学习 Java 常量与变量的小伙伴有所帮助这类知识记不住没关系多练就熟了。不要忘记给博主一键四连哦往期回顾【1.Java基础】Java初识从零搭建开发环境到写出第一个HelloWorld【1.1Java基础】JDK安装常见问题教辅-从踩坑到排雷【1.2Java基础】Win10环境变量配置详解-从原理到排雷