2.数据类型的转换与运算符的相关操作

本文章章主要记录数据类型的转换运算符的相关操作

Java基础-数据类型转换与运算符操作

数据类型转换的前言

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性如果数据类型不一致将发生类型的转换

数据类型的自动转换【隐式】

int类型变量byte类型变量进行加法运算时,结果会是什么类型

byte num1 = 1
int num2 = 2;
//byte num3 = num1 + num2;      //错误写法
//num1会自动类型提升成int
int num3 = num1 + num2;		//正确写法

String text = “隐式自动转换”;
#{text}特点:代码不需要进行特殊处理,自动完成。
#{text}规则会自动将取值范围小的数据类型提升为取值范围大的数据类型,byteshortchar运算时会首先提升成为int类型然后再计算
boolean类型不能发生数据类型转换
byte->short->int->long->float->double
这边可能有人会以为long(8字节)为什么会转float(4字节)?(如果这里没人有疑问更好
解答:转看 #{text}规则

附上一张图解
byte 类型内存占有1个字节,在和int 类型运算时会提升为int 类型,自动补充3个字节,因此计算后的结果还是int 类型
在这里插入图片描述

数据类型的强制转换【显式】

当把浮点数赋值给int数据类型时会发生什么问题?

//int num1 = 1.5;  //错误写法
int num1 =int1.5;	//正确写法

double 类型内存8个字节,int 类型内存4个字节。 1.5 是double 类型取值范围大于 int可以理解为 double 是8升的水壶, int 是4升的水壶,不能把大水壶中的水直接放进小水壶去
想要赋值成功,只有通过强制类型转换,将double 类型强制转换成 int 类型才能赋值。

String text = “强制显式手动转换”;
#{text}特点:代码需要进行特殊的格式处理,不能自动完成。
#{text}规则:将取值范围大的类型 强制转换成取值范围小的类型
#{text}格式数据类型 变量名 = (数据类型)被转数据值

int num1 = (int)1.5;	//强制类型转换(浮点数转换整数直接去掉小数)(可能造成精度损失)
	//结果:1
byte num2 = (byte)155;	//可能造成(数据丢失)
	//结果:-101
数据类型强制转换所带来的相关问题

数据类型强制转换有可能发生精度损失数据溢出(数据丢失)
精度损失口叙:当浮点数转换时有可能会造成小数的损失。(例如:浮点数转整数)
数据溢出口叙:4桶水倒进两个空桶里,可能会溢出水啊
强转所造成的数据丢失图解
在这里插入图片描述

ASCII表

编码表 ASCII(American Standard Code for Information Interchange 美国标准信息交换码)
0(48) - 9(57)
A(65) - Z(90)
a(97) - z(122)

运算符与表达式概念

运算符进行特定操作的符号。 例如:+
表达式用运算符连起来的式子叫做表达式。例如:20 + 5。又例如:a + b

运算符操作

算数运算符(+、-、*、/、%、++、–)

+(加法运算符)

注意事项:
1.对于数值来说,那就是加法。
2.对于char类型来说,char先根据ASCII表提升为int类型,再进行计算。
3.对于String字符串来说,是字符串拼接。

%(取模)(求余数)

规律如果有余数,那么余数为(0 ~ 除数-1)

++(自增)、–(自减)

++变量自己增长1
变量自己减少1
类别分为:前自增(num++)、后自增(++num),–和++一样。

使用的方式分为
单独使用不和其他任何操作混合,自己独立成为一个步骤
混合使用和其他操作混合,例如与赋值混合,或者与打印操作混合,等

使用的区别
在单独使用的时候前++和后++没有任何区别。也就是:++num;和num++;是完全一样的

在混合的时候有【重大区别】
如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。 【先加后用】
如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】。 【先用后加】

赋值运算符(+=、-=、*=、/=、%=)
int i = 5;
i+=3;   //i = i + 3;变量i先加3,再赋值变量i
比较运算符(>、<、>=、<=、!=、==)

比较运算符是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false

逻辑运算符(&、&&、|、||、!)

&&:与(并且)全都是true,才是true;否则就是false
||:或(或者)至少一个是true,就是true;全都是false,才是false
!:非(取反)本来是true,变成false;本来是false,变成true
条件A && 条件B(注:可以有多个条件)
逻辑运算符是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false
&与&& 和 |与||的区别
& 和 | 左右两边的式子一定会执行效率慢
&& 和 || 只要左边的式子能得出结果,右边的式子就不会执行效率快
!取反。 例子:!true(结果为false)

三元运算符(相当于if…else)

一元运算符只需要一个数据就可以进行操作的运算符。例如:取反!、自增++、自减–。
二元运算符需要两个数据才可以进行操作的运算符。例如:加法+、赋值=。
三元运算符格式数据类型 变量名 = 布尔类型表达式?表达式A:表达式B
三元运算符格式口述首先先判断布尔类型表达式是否成立,成立(true)将表达式A的值赋值给左侧的变量,不成立(false)将表达式B的值赋值给左侧的变量

注意事项:必须同时保证表达式A和表达式B都符合左侧数据类型的要求

方法定义的格式与作用

方法就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能

好处:当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性也解决了代码冗余的现象

定义格式
访问修饰符 [静态修饰符] 返回值类型 方法名(数据类型 变量名[参数列表]){
方法体 //可以包含任意条语句
return 返回类型;
}

注意:如果返回类型为void,那么方法体中不能写return关键字。

编译器的常量优化

在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。

例如:int num1 = 1 + 1;

这称为 “编译器的常量优化”

注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值