您的位置:首页 > 编程语言 > Java开发

java基础梳理三:基本数据类型转换、运算符

2018-06-24 15:16 489 查看

1、基本数据类型转换

byte i = 2;
int j = 3;
byte result = i + j;×
①赋值号右侧两个int类型的变量相加,得到的还是一个int类型的结果,把int类型的结果赋值给byte类型的变量,产生精度丢失,提示出错

②赋值号右侧int类型的变量和byte类型的变量相加,得到的是int类型的结果(类型提升),把int类型的结果赋值给byte类型的变量,产生精度丢失,提示出错

// 解决进度丢失问题的方法:
①将结果的数据类型改为大的数据类型
②使用强制类型转换:此时是有可能发生精度丢失的
// 强制类型转换的形式:(要转换为的数据类型)(被转换的数据内容)
int result = i + j;

byte result = (byte) (i + j);//不进行强制转换会出错,编译时就会出错


// 在浮点数后添加F 和 对浮点数强制类型转换为float类型,效果相同
float n = 987.65f;

float j = (float)987.65;

byte result1 = (i + j);报错

byte result3 = 2 + 3;

变量相加,先看类型有没有问题

常量相加,先看结果是否在被赋值的变量的数据类型范围内


// char类型和整型存在可转换的关系

①把字符'c'和int类型的1做加法,再赋值给char类型的变量j,j的类型为char,所以输出的还是字符

②字符和int类型的数做加法,得到的结果是int类型;System.out.println('c' + 1); // 100

③字符和字符做加法,得到的结果是int类型

// 布尔类型不参与运算


2、运算符

对常量或是变量进行操作的符号

①算术运算符:+ - * / % ++ --

int类型的变量和int类型的变量做除法时,得到的结果是int类型

double result = 0.0;

result = i / j;//3.0

System.out.println(i * 1.0 / j);//3.5;类型提升

System.out.println(i % j); // 1

System.out.println((i*1.0) % j); // 1.0

// 加号 + 
1、作为算术运算符的加号
2、作为正数的符号+

3、作为字符串的连接符号  System.out.println("北京" + 2008);


②++自增运算符 --直减运算符

i、单独使用自增运算符++:++不论放在变量前,还是变量后,都会让变量的值自增1

ii、参与运算时

int j = i++; // j = 2, i = 3:这句语句上来先把i的值赋值给j,然后i自己做自增

int j = ++i; // j = 3, i = 3:这句语句上来先i自己做自增,然后把i的值(自增后的值)赋值给j

②赋值运算符: = += -= *= /= %=
Java中的一个等号 = 表示的是将等号(赋值号)右侧的内容赋值给等号(赋值号)左侧的变量,习惯改称为 赋值号

以+=为例,表示的是将左侧的变量的值和右侧的内容按=前面的运算符进行相应的操作,操作后的结果再赋值给左侧的变量

//对于非默认数据类型的数据,使用赋值运算符时,会自动做一下强制类型转换

byte z = 5;

z += 3;

// z = (byte) (z + 3); // 上式等价


③比较运算符: == != > >= < <=

比较的结果必然是一个boolean值

格外注意:Java中使用 == 表示相等


④ 逻辑运算符: & | ^ ! && ||

参与运算的变量或是表达式的值都为boolean类型

& : 逻辑与 有一个是false得到的结果就是false
| : 逻辑或 有一个是true得到的结果就是true
! : 逻辑非 颠倒黑白

^ : 逻辑异或 吸铁石


&& : 逻辑与(聪明与/短路与)如果第一个是false,得到的结果就是false,且其他的就不执行了
|| : 逻辑或(聪明或/短路或)如果第一个是true,得到的结果就是true,且其他的就不执行了

int i = 2;
int j = 3;
System.out.println((++i == 2) && (j++ == 3)); // 因为第一个表达式的结果为false,所以第二个表达式不会执行了
System.out.println(i); // 3

System.out.println(j); // 3


⑤位运算符 & | ^ ~ >> >>> <<(学习日期:20150716【7】)
 规则:(在二进制中)
& : 进行操作的两个数的同一位上,有一个是0,结果就为0
System.out.println(2 & 3);//2
| : 进行操作的两个数的同一位上,有一个是1,结果就为1
System.out.println(2 | 3);//3
^ : 进行操作的两个数的同一位上,相同的是0,不同的是1
System.out.println(2 ^ 3);//1
~ : 进行操作的数按位取反(操作的是补码)
System.out.println(~2);//-3


位异或的其他用法:一个数和另一个数做两次异或后,得到的是它本身的值
可以使用在简单的加密解密中
System.out.println(2 ^ 3 ^ 3); // 2


<< : 左移,左边的高位删除,右边的低位补0
>> : 右移,因为左侧的最高位是符号位,所以要区分是0还是1;左侧的最高位是0,左侧补0;左侧的最高位是1,左侧补1

>>> : 无符号右移,不论左侧最高位是是0还是1;左侧补0

System.out.println(2 << 1);//4
System.out.println(2 >> 1);//1
System.out.println(-2 >> 1);//-1

System.out.println(-2 >>> 1);//2147483647

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐