Java · 常量介绍 · 变量类型转换 · 理解数值提升 · int 和 Stirng 之间的相互转换
书接上回 Java 变量介绍 我们继续学习以下内容.
- 四、常量
- 字面值常量
- final 关键字修饰的常量
- 五、理解类型转换
- int 和 long/double 相互赋值
- int 和 boolean 相互赋值
- int 字面值常量给 byte 赋值
- 强制类型转换
- 类型转换小结
- 六、理解数值提升
- int 和 long 混合运算
- byte 和 byte 的运算
- 类型提升小结
- 七、int 和 String 之间的相互转换
- int 转成 String
- String 转成 int
- 八、总结
四、常量
上面讨论的都是各种规则的变量,每种类型的变量也对应着一种相同类型的常量。
常量指的是运行时类型不能发生改变。
常量主要有以下两种体现方式:
字面值常量
10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制)由数字0开头. 010就是十进制的8
0x10 // int 字面值常量(十六进制)由数字0x开头. 0x10就是十进制的16
10L // long 字面值常量. 也可以写作 10l(小写的L)
1.0 // double 字面值常量 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量 科学计数法表示 相当于 1.5*10^2
1.0f // float 字面值常量,也可以写作 1.0F
true // boolean 字面值常量,同样还有 false
'a' // char 字面值常量,单引号中只能有一个字符
"abc" // String 字面值常量,双引号中可以有多个字符
final 关键字修饰的常量
final int a = 10;
a = 20; //编译出错,无法为最终变量 a 分配值
常量不能在程序运行过程中发生修改
五、理解类型转换
Java 作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有严格的校验。
先看以下几个代码场景:
int 和 long/double 相互赋值
int a = 10;
long b = 20;
a = b; //编译出错,提示可能会损失精度.
b = a; //编译通过.int a = 10;
double b = 1.0;
a = b; //编译出错,提示可能会损失精度.
b = a; //编译通过.
long 表示的范围更大,可以将 int 赋值给 long,但是不能将 long 赋值给 int.
double 表示的范围更大,可以将 int 赋值给 double,但是不能将 double 赋值给 int.
结论:
不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行。
就相当于两杯水,int类型的水杯小,long类型的水杯大。
小水杯可以把水装进大水杯,而大水杯不能把水装进小水杯。
int 和 boolean 相互赋值
int a = 10;
boolean b = true;
b = a; //编译出错,提示不兼容的类型
a = b; //编译出错,提示不兼容的类型
结论:int 和 boolean 是两种毫不相干的类型,不能相互赋值。
int 字面值常量给 byte 赋值
byte a = 100; //编译通过
byte b = 256; //编译报错,提示从 int 转换到 byte 可能会有损失
注意:byte 表示的数据范围是 -128~+127已经超出范围,而 100 还在范围之内.
结论:使用字面值常量赋值的时候,Java 会自动进行一些检查校验,判断赋值是否合理.
强制类型转换
int a = 0;
double b = 10.5;
a = (int)b;int a = 10;
boolean b = false;
b = (boolean)a; //编译出错,提示不兼容的类型.
结论:使用 “(类型)” 的方法可以将 double 类型强制转成 int,但是
- 强制类型转换,可能会导致精度丢失,例如强制转换后,10.5 就变成 10 了,小数点后面的部分被忽略。
- 强制类型转换不一定会成功,互不相干的类型之间无法强转。
类型转换小结
- 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型.
- 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能会精度丢失.
- 将一个字面值常量进行赋值的时候,Java 会自动针对数字范围进行检查.
六、理解数值提升
int 和 long 混合运算
int a = 10;
long b = 20;
int c = a + b; //编译出错,提示将 long 转成 int 会丢失精度.
long d = a + b; //编译通过.
结论:当 int 和 long 混合运算的时候,int 会提升成 long,得到的结果仍然是 long 类型,需要使用 long 类型的变量来接收结果。如果非要用 int 来接收数据,就需要使用强制类型转换。
byte 和 byte 的运算
public static void main(String[] args) {byte a = 10;byte b = 20;byte c = a + b; //编译出错!
}
结论:
虽然 byte 和 byte 都是相同类型,但是出现编译错误,计算 a+b 会先将 a 和 b 都提升成 int,再进行计算,得到的结果也是 int,最后赋值给 c,导致出现上述错误.
为什么会偷偷的提升类型?
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据。为了硬件上实现方便,byte 和 short 这种低于 4 个字节的类型,会先提升到 int,再参与计算。
so 正确的写法:
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
类型提升小结
- 不同类型的数据混合运算,范围小的会提升成范围大的.
- 对于 short、byte 这种比 4 个字节小的类型,会先提升成 4 个字节的 int,再运算。
七、int 和 String 之间的相互转换
int 转成 String
int num = 10;
//方法一
String str1 = num + "";
//方法二
String str2 = String.valueOf(num);
String 转成 int
String str = "100";
int num = Integer.parseInt(str);
八、总结
Java 类型汇总,前面的内容重点介绍的都是基本数据类型.

每种数据类型及其范围,都是我们需要掌握的重点。
难点是隐式类型转换和类型提升,我们只要在代码中避免不同类型混用的情况,就能减少出现隐式转换和类型提升。
相关文章:
Java · 常量介绍 · 变量类型转换 · 理解数值提升 · int 和 Stirng 之间的相互转换
书接上回 Java 变量介绍 我们继续学习以下内容. 四、常量字面值常量final 关键字修饰的常量五、理解类型转换int 和 long/double 相互赋值int 和 boolean 相互赋值int 字面值常量给 byte 赋值强制类型转换类型转换小结六、理解数值提升int 和 long 混合运算byte 和 byte 的运算…...
JVM从跨平台到跨专业 Ⅲ -- 类加载与字节码技术【下】
文章目录编译期处理默认构造器自动拆装箱泛型集合取值可变参数foreach 循环switch 字符串switch 枚举枚举类try-with-resources方法重写时的桥接方法匿名内部类类加载阶段加载链接初始化相关练习和应用类加载器类与类加载器启动类加载器拓展类加载器双亲委派模式自定义类加载器…...
ucore的字符输出
ucore的字符输出有cga,lpt,和串口。qemu模拟出来显示器连接到cga中。 cga cga的介绍网站:https://en.wikipedia.org/wiki/Color_Graphics_Adapter cga是显示卡,内部有个叫6845的芯片。cga卡把屏幕划分成一个一个单元格,每个单元格显示一个a…...
【ESP 保姆级教程】玩转emqx数据集成篇① ——认识数据集成
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-10 ❤️❤️ 本篇更新记录 2023-02-10 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
PMP报考条件?
PMP已经被认为是项目管理专业身份的象征,项目经理人取得的重要资质。 PMP考试一般每年在中国大陆地区,会进行四次考试,今天就来详细说一说PMP考试的时间线。 01考试时间PMP考试在中国大陆一年开展四次,分别在每年的3月、6月、9月…...
Vite+Vue3实现版本更新检查,实现页面自动刷新
ViteVue3实现版本更新检查,实现页面自动刷新1、使用Vite插件打包自动生成版本信息2、Vite.config.ts配置3、配置环境变量4、路由配置现有一个需求就是实现管理系统的版本发版,网页实现自动刷新页面获取最新版本 搜索了一下,轮询的方案有点浪费…...
LeetCode刷题模版:292、295、297、299-301、303、304、309、310
目录 简介292. Nim 游戏295. 数据流的中位数297. 二叉树的序列化与反序列化【未理解】299. 猜数字游戏300. 最长递增子序列301. 删除无效的括号【未理解】303. 区域和检索 - 数组不可变304. 二维区域和检索 - 矩阵不可变309. 最佳买卖股票时机含冷冻期310. 最小高度树【未理解】…...
20、CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别
CSS中的px 和 % px (pixels) 是固定单位,也可以叫基本单位,代表像素,可以确保元素的大小不受屏幕分辨率的影响。 % (percentage) 是相对单位,代表元素大小相对于其父元素或视口(viewport)的大小的百分比。使用百分比可…...
第五节 字符设备驱动——点亮LED 灯
通过字符设备章节的学习,我们已经了解了字符设备驱动程序的基本框架,主要是掌握如何申请及释放设备号、添加以及注销设备,初始化、添加与删除cdev 结构体,并通过cdev_init 函数建立cdev 和file_operations 之间的关联,…...
浅谈小程序开源业务架构建设之路
一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态,我们的愿景是:定义移动时代最佳体验,建设智能小程序行业标准,打破孤岛,共建开源、开放、繁荣的小程序行业生态。百度…...
git、gitee、github关系梳理及ssh不对称加密大白话解释
温馨提示:本文不会讲解如何下载、安装git,也不会讲解如何注册、使用gitee或GitHub,这些内容网上一大把,B站上的入门课程也很多,自己看看就好了。 本文仅对 git、gitee、github的关系梳理及ssh公钥私钥授权原理用白话讲…...
UDP协议详解
目录 前言: 再谈协议 UDP协议 比较知名的校验和 小结: 前言: UDP和TCP作为传输层非常知名的两个协议,那么将数据从应用层到传输层数据是怎样进行打包的?具体都会增加一些什么样的报头,下面内容详细介绍…...
Myb atis基础3
Mybatis注解开发单表操作Mybatis的常用注解Mybatis的增删改查MyBatis注解开发的多表操作MyBatis的注解实现复杂映射开发一对一查询一对多查询多对多查询构建sqlsql构建对象介绍查询功能的实现新增功能的实现修改功能的实现删除功能的实现Mybatis注解开发单表操作 Mybatis的常用…...
VHDL语言基础-时序逻辑电路-寄存器
目录 寄存器的设计: 多位寄存器: 多位寄存器的VHDL描述: 移位寄存器: 串进并出的移位寄存器的VHDL描述: 寄存器的设计: 多位寄存器: 一个D触发器就是一位寄存器,如果需要多位寄存器&…...
高通开发系列 - linux kernel更新msm-3.18升至msm-4.9
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 linux kernel更新msm-3.18升至msm-4.9第一周处理的内容:第二周处理的内容第三周处理的内容linux kernel更新msm-3.18升至msm-4.9 第…...
【Tensorflow2.0】tensorflow中的Dense函数解析
目录1 作用2 例子3 与torch.nn.Linear的区别4 参考文献1 作用 注意此处Tensorflow版本是2.0。 由于本人是Pytorch用户,对Tensorflow不是很熟悉,在读到用tf写的代码时就很是麻烦。如图所示,遇到了如下代码: h Dense(unitsadj_di…...
PyTorch学习笔记:data.RandomSampler——数据随机采样
PyTorch学习笔记:data.RandomSampler——数据随机采样 torch.utils.data.RandomSampler(data_source, replacementFalse, num_samplesNone, generatorNone)功能:随即对样本进行采样 输入: data_source:被采样的数据集合replace…...
设计模式(七)----创建型模式之建造者模式
1、概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解…...
DCGAN
DCGAN的论文地址[https://arxiv.org/pdf/1511.06434.pdf]。DCGAN是GAN的一个变体,DCGAN就是将CNN和原始的GAN结合到一起,生成网络和鉴别网络都运用到了深度卷积神经网络。DCGAN提高了基础GAN的稳定性和生成结果质量。DCGAN主要是在网络架构上改进了原始的…...
【速通版】吴恩达机器学习笔记Part3
目录 1.多元线性回归 a.特征缩放 可行的缩放方式: 1.除以最大值: 2.mean normalization: 3.Z-score normalization b.learning curve: c.learning rate: 2.多项式回归 3.classification logistics regression 1.多元线性回归 其意义很…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
