JavaSE · 常量介绍 · 变量类型转换 · 理解数值提升 · int 和 Stirng 之间的相互转换

news2024/11/24 12:28:07

书接上回 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,但是

  1. 强制类型转换,可能会导致精度丢失,例如强制转换后,10.5 就变成 10 了,小数点后面的部分被忽略。
  2. 强制类型转换不一定会成功,互不相干的类型之间无法强转

类型转换小结

  1. 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型.
  2. 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能会精度丢失.
  3. 将一个字面值常量进行赋值的时候,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);

类型提升小结

  1. 不同类型的数据混合运算,范围小的会提升成范围大的.
  2. 对于 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 类型汇总,前面的内容重点介绍的都是基本数据类型.

每种数据类型及其范围,都是我们需要掌握的重点

难点隐式类型转换和类型提升,我们只要在代码中避免不同类型混用的情况,就能减少出现隐式转换和类型提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你还在用CSS旧时代布局的王者:浮动float 吗?

写在前面 随着flex、grid等布局的兼容性越来越好,float几乎已经在大众的视野消失了,曾经默认的小妖精终究成为了时代的眼泪。 作为前端开发者,你经历过float的时代吗?还在用float吗? 一、什么是浮动? 首…

ccc-台大林轩田机器学习基石-hw0

文章目录1 Probability and Statistics2 Linear Algebra3.Calculus一览图hw0题目链接1 Probability and Statistics 不妨假设C(n,K)C(n,K),0≤K≤NC(n, K)C(n, K) ,0 \le K\le NC(n,K)C(n,K),0≤K≤N成立,只需证明C(n1,K)(n1)!K!(…

list类的使用和模拟实现

目录 一、list类的介绍 二、list的使用 1.构造、拷贝构造函数和迭代器 2.数据的增删查改 三、list的部分接口实现 1.节点定义 2.list类的组织 四、list的迭代器 1.迭代器的设计思路 2.const迭代器 3.->操作符的重载 4.反向迭代器 一、list类的介绍 list就是C库…

Elasticsearch基本概念和索引原理

一、Elasticsearch是什么? Elasticsearch是一个基于文档的NoSQL数据库,是一个分布式、RESTful风格的搜索和数据分析引擎,同时也是Elastic Stack的核心,集中存储数据。Elasticsearch、Logstash、Kibana经常被用作日志分析系统&…

[CCS 2022] 皇帝没有衣服:用于网络安全的AI/ML

AI/ML for Network Security: The Emperor has no ClothesCCS 22: Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Securityhttps://dl.acm.org/doi/abs/10.1145/3548606.3560609摘要最近的一些研究工作提出了基于机器学习(ML&…

工业废水的种类及其处理工艺有哪些?特定目标污染物的深度去除

随着工业的迅速发展,工业废水的种类和数量随之增加,对水体的污染也日趋严重,威胁人类的健康和正常生活。所以工业废水的处理对于环保至关重要。 保护生态环境、更好地做好工业废水的处理,了解工业废水及其种类与处理非常必要。 工…

MySQL 删除数据库

使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据…

【Hello Linux】 Linux基础命令

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的基础命令 Linux基础命令ls指令lsls -als -dls -ils -sls -lls -nls -Fls -rls -tls -Rls -1总结思维导图pwd指令whoami指令…

Python 条件语句

Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。可以通过下图来简单了解条件语句的执行过程:Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。Python 编程中 i…

【正点原子FPGA连载】第八章UART串口中断实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第八章UART串口中…

【SSD 代码精读】之 数据增强(Data Augmentation)

SSD 数据增强前言1、Compose2、SSDCropping3、Resize4、ColorJitter5、ToTensor6、RandomHorizontalFlip7、Normalization8、AssignGTtoDefaultBox前言 原论文 根据原论文,我们需要处理的有以下: data_transform {"train": transforms.Com…

vue2.x中使用vuex

Vuex是什么? Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也被集成到了Vue的官方调试工具vue-devtools中,提供了诸如零配置…

Java:使用Java功能确保应用程序安全的方法

与添加新功能一样重要的是,应用程序开发人员需要开始更加重视他们设计的应用程序的安全性。毕竟,更多的应用程序功能意味着更多的数据驻留在应用程序中。如果没有适当的安全控制,这些数据很容易被入侵者窃取。Java是目前世界上最安全、最流行…

如何去阅读源码,我总结了18条心法

在聊如何去阅读源码之前,先来简单说一下为什么要去阅读源码,大致可分为以下几点原因:最直接的原因,就是面试需要,面试喜欢问源码,读完源码才可以跟面试官battle提升自己的编程水平,学习编程思想…

不要慌,我们谈一谈如何用好 ChatGPT

别人贪婪时我恐惧,别人恐惧时我贪婪。 ——巴菲特 ChatGPT 火了,技术领域的社交媒体、自媒体几乎被 ChatGPT 刷屏,这些内容当中最让人惶恐不安的是我们是否会被 AI 取代之类的文章。 比如以下几个文章标题: 《ChatGPT可能马上…

Transformer结构解读

咱们还是照图讨论,transformer结构图如下,本文主要讨论Encoder部分:图一一、首先说一下Encoder的输入部分:在NLP领域,个人理解,这个inputs就是我们的句子分词之后的词语,比如“我,喜…

符号让人疯狂

符号让人疯狂 判断背了个LV符号的包就想可能有钱 趣讲大白话:人是通过符号区分生活的 聪明人想想:能超越或摆脱符号依赖吗? *********** 信息社会加速符号的传递和创造 我们已经被各种信息传递的符号淹没 信息符号的筛选成了人的主要工作 再…

GRB非隔离系列宽电压输入负高电压输出 电压控制型

特点● 效率高达70%以上● 1*2英寸标准封装● 单电压负输出● 价格低● 电压控制,输出电压随控制电压变化线性变化● 工作温度: -40℃~85℃● 阻燃封装,满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输…

十、Linux文件 - fread函数讲解

目录 1.fread函数讲解 2.fread函数实战 1.fread函数讲解 从文件中读入数据到指定的地址中 函数原型: size_t fread(void*buff , size_t size, size_t count , FILE* stream) /* * description :对已打开的流进行数据读取 * param ‐ ptr :指向 数据块的…

好用的电脑备份软件推荐

现在几乎每个人都有一台电脑,上面存储着大量的数据,比如宝贵的照片、视频、工作文档等等。但电脑也随时存在许多威胁,比如病毒、Windows 更新错误、死机黑屏、驱动程序问题、系统崩溃等。为防止任何数据丢失,你需要一个专业的电脑…