数据类型转换与运算符
一、数据类型转换
1.数据类型转换
1.1自动数据类型转换
-
整数类型自动数据类型转换:当长度小的数据类型,赋值给长度长的数据类型。那么只需要在高位补零。数据的值未发生变化,只有长度变化。
-
浮点数自动数据类型转换:当长度小的数据类型,赋值给长度长的数据类型。那么只需要在高位补零。数据的值未发生变化,只有长度变化。
-
将整数赋值给浮点数:精度低的往精度高的赋值,可以直接转换(不需要考虑长度)
1.2强制数据类型转换 语法:a = a(b)
-
当整数长度长的往长度短的赋值,需要强制数据类型转换。高位丢失,如果高位无值,则对结果没有影响。
-
当浮点数精度高的往浮点数精度低的赋值,需要强制数据类型转换。丢失精度,不是四舍五入!
-
浮点数往整数赋值,丢失精度。
补充
- 在方法当中的申明的基本数据类型,保存在栈当中
- 栈具有先进后出的特性
- 所有的基本数据类型的值在栈当中,都为唯一值
2.运算符
⭐基本数据类型赋的是值
⭐引用数据类型赋的是地址
2.1赋值运算符
符号:=,+=,-=,*=,/=,%=
2.2算术运算符(条件是数值,运算的结果也是数值)
-
+:可以用于字符串拼接(+号两边,只要有一个字符串,结果就是字符串);如果参与的表达式两边都是数值,则是加法运算。如果想在拼接的过程当中,先进行表达式的运算,需要提高表达式的优先级。加括号。
-
-:
-
*:
-
/:取整:当除数或者被除数都为整数,结果取整;除数或者被除数,有任意一个为浮点数,结果为浮点
数。注意:除数不可为0
-
%:取余
-
++/--:自增/自减
-
自增在原本变量数值的基础上+1
-
自减在原本变量数值的基础上-1
-
前置:先自增,后运算
-
后置:先运算,在自增
-
-
2.3复合赋值运算符(数值,运算的结果也是数值)
在其值基础上进行运算,后再次对原变量进行赋值
2.4关系运算符
-
比较的目标
-
比较的数值:>, <, >=, <=
-
比较数值,还可以比较地址,boolean: == , !=。(比较两个String是否相等需要使用方法equals)
-
-
比较的结果:boolean
2.5逻辑运算符
- 比较的目标是布尔类型
- 比较的结果也是布尔类型
- 比较的方式
- 与&:同为true的情况下,结果为true;有一个为false,结果为false
- 或|:同为false的情况下,结果为false;有一个为true,结果为true
- 非 !:真到假时假亦真
- 长路与短路(&&短路与,&长路与,推荐使用),(|| , |)
- 只要左面得到结果,右面不再执行
- 无论左面是否有结果,右面都需要继续执行
2.6三目/三元运算符
语法:<结果为boolean类型的表达式> ? <表达式为true,语句1> : <表达式为false,语句2>
三目运算符可以嵌套
2.7位运算符(只要了解)
左位移:<< ,每位移1位 * 2
右位移:>> , 每位移1位 / 2
2.8类型的自动提升
- 字符串和其他值拼接:结果为字符串
- 数值运算:低位往高位提升,低精度往高精度提升
一个思考题:任意四位数,请尝试分别取出个十百千位的值
继续思考:换一种方式来实现
public class Test01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.print("请输入一个四位数:");
int num = input.nextInt();
int n;
// System.out.println(num+"的千位是:"+(num/1000));
// System.out.println(num+"的百位是:"+(num/100%10));
// System.out.println(num+"的十位是:"+(num/10%10));
// System.out.println(num+"的个位是:"+(num%10));
while(num>0) {
n = num % 10;
System.out.println(n);
num = num/10;
}
}
}
运行结果:
请输入一个四位数:1234
4
3
2
1