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

news2024/11/29 4:29:30

书接上回 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/335469.html

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

相关文章

大数据未来会如何发展

大数据应用的重要性,自全国提出“数据中国”的概念以来,我们周围默默地在发挥作用的大数据逐渐深入人们的心中,大数据的应用也越来越广泛,具体到金融、汽车、餐饮、电信、能源、体育和娱乐等领域 为什么大数据技术那么火&#xf…

机器学习之决策树原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)

目录1. 决策树原理1.1. 特性1.2. 思路1.3. 概念决策树概念信息论2. 公式推导2.1. 构造决策树2.1.1. ID3理论示例缺点2.1.2. C4.5理论示例缺点2.1.3. CART示例对比分析2.2. 剪枝3. 实例3.1. 数据集3.2. ID33.3. C4.53.4. CART3.5. sklearn实现4. 几个注意点(面试问题)5. 运行&am…

高性能MySQL -- 查询性能优化

一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化。今天我们来讲一下查询优化。 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于《小林coding》 为什么从查询会慢&#xff1…

点云深度学习系列博客(四): 注意力机制原理概述

目录 1. 注意力机制由来 2. Nadaraya-Watson核回归 3. 多头注意力与自注意力 4. Transformer模型 Reference 随着Transformer模型在NLP,CV甚至CG领域的流行,注意力机制(Attention Mechanism)被越来越多的学者所注意,将…

九、Linux文件 - fopen函数和fclose函数讲解

目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include <stdio.h> standard io lib open close write read 属于Linux系统调用 可移植型&#xff1a;fopen > open&#xff08;open函数只在嵌入…

ES6的代理Proxy和反射Reflect的使用

一、Proxy使用 作用&#xff1a;Proxy是ES6为了操作对象而引入的API&#xff0c;不直接作用于对象&#xff0c;而是通过类似媒介的方式进行对象的操作使用 /*** target&#xff1a;需要proxy处理的对象* handler&#xff1a;对对象进行处理的方法 */ let proxy new Proxy(ta…

ARM uboot源码分析2-启动第一阶段

一、start.S 解析5 注释的中文含义&#xff1a; 当我们已经在 RAM 中运行时&#xff0c;我们不需要重新定位 U-Boot。实际上&#xff0c;在 U-Boot 在 RAM 中运行之前&#xff0c;必须配置内存控制器。 1、判断当前代码执行位置 (1) lowlevel_init.S 的 110-115 行。 (2) 这几…

5年经验之谈:月薪3000到30000,测试工程师的变“行”记!

自我介绍下&#xff0c;我是一名转IT测试人&#xff0c;我的专业是化学&#xff0c;去化工厂实习才发现这专业的坑人之处&#xff0c;化学试剂害人不浅&#xff0c;有毒&#xff0c;易燃易爆&#xff0c;实验室经常用丙酮&#xff0c;甲醇&#xff0c;四氯化碳&#xff0c;接触…

ESP32 Arduino(十二)lvgl移植使用

一、简介LVGL全程LittleVGL&#xff0c;是一个轻量化的&#xff0c;开源的&#xff0c;用于嵌入式GUI设计的图形库。并且配合LVGL模拟器&#xff0c;可以在电脑对界面进行编辑显示&#xff0c;测试通过后再移植进嵌入式设备中&#xff0c;实现高效的项目开发。SquareLine Studi…

RMI攻击中的ServerClient相互攻击反制

前言 前文中&#xff0c;我们分析了攻击Registry的两种方式&#xff0c;这里我们接着前面的内容&#xff0c;分析Server和Client的相互攻击方式。 Attacked Server Attacked By Client 首先我们搭建个示例&#xff0c;这里直接注册端和服务端放置在一起。 package pers.rm…

JS 实现抛物线动画案例

相信大家都有浏览过&#xff0c;很多购物网站购物车的添加商品动画&#xff0c;今天&#xff0c;我们就手写一个简单的抛物线动画&#xff0c;先上案例&#xff1a; 一、绘制页面 我们这里简单实现&#xff0c;一个按钮&#xff0c;一个购物车图标&#xff0c;样式这里直接跳过…

GNN图神经网络原理解析

一、GNN基本概念 1. 图的基本组成 图神经网络的核心就是进行图模型搭建&#xff0c;图是由点和边组成的。在计算机处理时&#xff0c;通常将数据以向量的形式进行存储。因此&#xff0c;在存储图时&#xff0c;就会有点的向量&#xff0c;点与点之间边的向量&#xff0c;全局…

Acwing---1235. 付账问题

付账问题1.题目2.基本思想3.代码实现1.题目 几个人一起出去吃饭是常有的事。 但在结帐的时候&#xff0c;常常会出现一些争执。 现在有 nnn个人出去吃饭&#xff0c;他们总共消费了 SSS元。 其中第 iii 个人带了 aiaiai元。 幸运的是&#xff0c;所有人带的钱的总数是足够…

vue解决跨域问题-反向代理

浏览器有同源策略&#xff0c;限制同协议、同域名、同端口&#xff0c;只要有一项不一致&#xff0c;就是跨域。&#xff08;不同源则跨域&#xff09; 解决方案&#xff1a; 后端 、cors 、 jsonp、 反向代理 同源下&#xff1a;浏览器向服务器请求数据&#xff0c;服务器响应…

jenkins +docker+python接口自动化之docker下安装jenkins(一)

jenkins dockerpython接口自动化之docker下安装jenkins&#xff08;一&#xff09; 目录&#xff1a;导读 1、下载jenkins 2、启动jenkins 3、访问jenkins 4.浏览器直接访问http://ip/:8080 5.然后粘贴到输入框中,之后新手入门中先安装默认的插件即可&#xff0c;完成后出…

俄罗斯方块游戏代码

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽…

图表控件LightningChart .NET再破世界纪录,支持实时可视化 1 万亿个数据点

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)

百度地图开发系列目录 数据可视化大屏应急管理综合指挥调度系统完整案例详解&#xff08;PHP-API、Echarts、百度地图&#xff09;数据可视化大屏百度地图API开发&#xff1a;停车场分布标注和检索静态版百度地图高级开发&#xff1a;map.getDistance计算多点之间的距离并输入…

元宵晚会节目预告没有岳云鹏,是不敢透露还是另有隐情

在刚刚结束的元宵节晚会上&#xff0c;德云社的岳云鹏&#xff0c;再一次参加并引起轰动&#xff0c;并获得了观众朋友们的一致好评。 不过有细心的网友发现&#xff0c;早前央视元宵晚会节目预告&#xff0c;并没有看到小岳岳&#xff0c;难道是不敢提前透露&#xff0c;怕公布…

TCP 三次握手和四次挥手

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录TCP 建立连接(三次握手)为啥不能是 4 次&#xff1f;为啥不能是 2 次&#xff1f;三次握手的意义&#xff1a;TCP 断开连接(四…