Java数据类型转换变量运算符
1. 数据类型转换
1.1. 数据类型回顾,及什么是数据类型转换
1.1.1. 基本数据类型
byte short char int long float double boolean
1.1.2. 引用类型数据
String, 枚举 , 数组 ,接口,枚举
1.1.3. 基本数据和引用类型数据的区别
1.基本数据类型变量: 存的是值的本身
2.引用类型数据变量: 存的是对值的引用[ 地址值 ]
1.1.4. 什么是数据类型转换
数据类型的转换:数据的类型转换,比如整数10转换成小数10.0
1.1.5. 为什么要进行数据类型的转换
为了节省空间大转小
Web前台传的都是字符串数据,如果后台需要运算,得转换
1.2. 数据类型转换的基本认识
- 1.整型数据【值】 : 默认类型为int类型 :例如:12默认为int类型
- 2.小数数据 : 默认为double类型 :例如:3.14默认为double类型
- 1.自动类型转换:小数据类型转大数据类型【存储空间的大小】 小转大
- 2.强制类型转换: 大转小
- 1.大数据类型转小数据类型[存储空间大小]
- 2.相同存储空间不同类型表达值范围不一样[例如:char及short
1.3. 数据转换图例说明
- 在Java中,boolean类型与所有其他7种类型都不能进行转换。(byte short int long float double char)
- 如下7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化:
byte àshort ,char à int àlongà floatà double
- 自动类型转换: [short和char ,因值的范围不同,不能自动转换]其他都可以自动完成转换
- 强制类型转换: 必须强制转换。
思考:
为什么float 在long 后面?
小数(浮点数) 的存储方式,结构和整数不一样:知道就好无须深入研究..
1.4. 自动转换
1.4.1. 数据类型过长 和 溢出
byte b = 128;//超出byte范围
long intMax = int最大数(查jdk文档)
1.4.2. long float double只要两个操作数中有一个是上面类型的,另一个就会被转换成相应类型,并且结果也是该类型: 例如
int num = 10;
double b = 10.01;
double c = num + b;
System.out.println(c);
1.4.3. 如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int(自动向上转型)
short s = 10;
int num = 20;
int n = num + s;
System.out.println(n);
byte b=3;
b=(byte)(b*3);//必须声明byte。
System.out.println(b);
1.4.4. char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
例如:
char c = 'A';
int num = 10;
int a = c+num;
System.out.println(a);
需要注意的是:
- char型具有两个字节,其数值范围是0 ~ 2^16-1,
- short类型也具有两个字节,其值的范围是-2^15 ~ 2^15-1
这直接导致byte型不能自动类型提升到char,char和short直接也不会发生自动类型提升(因为值范围问题),同时,byte当然可以直接提升到short型。
所以,char 不能和byte short 相互自动转换
1.4.5. 特例 :只看类型不看值
示例1:
int a = 129;
byte b = (byte)a;//编译器只看容器不看值
System.out.println(b);//结果为-127
示例2:
byte b = 100;//可以自动转换
float f = 1.3;//不能自动转换
int a = 2147483647;
a = a+1;
System.out.println(a); // 结果为 -2147483648
1.5. 强制转换
1.5.1. 强制类型转换的语法
- 数据类型 变量名 = (数据类型)值;//值可能是更高的类型
1.5.2. 强制类型转换的注意事项
- 高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.
- 实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;
1.5.3. 示例
比如说:double 转 float
示例一:
int i1=123;
int i2=456;
float f1 = (float) ((i1+i2)*1.2);//容量大的类型转换为容量小的类型时,要加上强制转换符
示例二:
short i=99;
char c=(char)i;
System.out.println(c);
示例三:
byte b1=1;
byte b2=2;
byte b3=(byte)(b1+b2); //byte,short,char在计算时首先转换为int,大容//量(int)转换为小容量的类型(byte)时要加强制转换
特 例:
byte t = 127;//不报错
int a = 127;//需要强制转换才不报错:编译器只看容器【只看类型】不看值
byte b = (byte)a;System.out.println(b); // 结果为 127
2. 常量[掌握]
2.1. 什么是常量
- 常量就是一个固定不变的量(或者值)已知的值。例如 123,45,1.2,false等。
2.2. 常量的的分类
- 整数常量 例如:100 200 600L
- 小数常量 例如:1.3 2.5 2.1F
- 字符串常量 例如:”你好” “我也是醉了”
- 字符常量 例如: ‘A’
- 布尔常量 例如:true false
上面的5中表示形式的常量都可以直接放在打印语句中打印
3. 转义字符
3.1. 什么是转意符
Java规定特殊符号具有特殊意义,实现特殊目的的符号。
3.2. 常见转意符
- \r 表示接受键盘输入,相当于按下了回车键;
- \n 表示换行;
- \t 表示相当于Table键制表符,;
- \b表示退格键,相当于Back Space键;
- \' 表示单引号;
- \'' 表示双引号;
- \\ 表示一个斜杠\。
4. 变量[重点掌握]
4.1. 引入
4.1.1. 举例:
- 变量比作是酒店的房间,
- 需存储的数据就比作要住宿的客人
- 我们可以根据客人的要求安排其入住“标准间”或者是“总统套房”,
- 并且可以根据房间名字快速查找到入住客人的信息。
4.1.2. 同理,
在 Java 程序中,我们也可以根据所需要保存的数据的格式,将其保存在指定类型的变量空间中,并且通过变量名快速定位!
4.2. 什么是变量
官方概念:在计算机内存区域分配了一个内存地址,计算机中的一个存储空间
通俗一点:变量可以看成是一个容器。我们对容器的概念就是它的作用是能够装一个东西。
4.3. 变量的语法
需求 :假设现在有一份数据是整型数据 18,希望使用一个变量存储起来,怎么做?
- 必须获得一个变量容器(声明 或者定义一个变量),整型数据需要存入变量中
语法格式:
- 先定义后赋值
数据类型 变量名;
变量名 = 值;
- 定义的同时赋值
数据类型 变量名 = 值;
4.4. 变量的注意事项及特点:
- 此处的数据类型可以是Java中支持的所有的数据类型!
- 数据类型限定了变量可以存值的类型
- 赋值使用的 = 号,从右往左赋值
- 规范写法:= 两边都加上一个空格
- 变量一旦定义好了,可以反复使用
- 变量只可以存一次值,下次存值会覆盖上一次的值
示例:
int age = 18;
System.out.println(age+69);
注意:
变量把值进行传递(后面讲了 方法 后大家再去进一步了解)
记住一点,我们在使用变量的时候其实关心的还是变量盒子中的数据,变量仅仅是一个载体而已。
4.5. 变量分类
4.5.1. 成员变量
- 直接声明在类结构体中的变量;可以放在方法的上面 ,也可以放在下面
主方法使用static修饰,静态的区域,如果打印成员变量报错:
- 怎么解决上面问题?
把主方法的static 去掉(但是找不到主方法)
成员变量age也使用static 修饰
- 特点:
成员变量如果没有赋值,那么系统会分配默认值(不同的数据类型有不同的默认值,这点请参考数据类型);
4.5.2. 局部变量:
- 直接声明在方法内部,比如main方法的形参 或者 大括号中
- 特点:使用之前必须初始化值,不存在默认值
4.6. 作用域范围:
4.6.1. 作用域详解
- 成员变量:在整个类中都可以使用
- 局部变量:在局部的大括号中可以使用,外部或者不同区域的大括号中不可以使用
- 使用的变量,必须声明在使用之前。
4.6.2. 局部变量与成员变量区别
- 局部变量在使用之前必须得有值,试想一下一个空变量盒子你用啥呢?
- 成员变量系统会分配默认值(默认值意义不大)
- 作用域范围不同
- 成员变量的值,随着对象的存在而一直存在
- 局部变量为了辅助方法完成功能而临时存在,方法使用完毕,局部变量生命周期结束
4.6.3. 问题
- 同一个作用域范围之内能不能够有两个名字一样的变量 , 为什么?
4.7. 练习
交换2个变量里面的数据,例如 变量 a= 3;b=5; 交换后则变成:a=5,b=3;
4.8. 总结
变量是用来干啥的?变量有如下的一些特点
- 必须先声明变量再使用变量(先得有一个变量盒子,然后在拿来装东西);
- 每一个变量都有一个名字,方便使用;
- 都有一种数据类型,不同类型的变量盒子中装不同的数据;
5. 表达式[掌握]
5.1. 什么是表达式
概念:
其实就是由一系列的 常量 变量 运算符,括号()组成的一个算式,为了按照一定的运算规则计算出结果值.
5.2. 表达式示例
- 3+2
- 3+5*(2+3)
5.3. 表达式有什么用
为了按照一定的运算规则计算出结果值
结果值如何使用
- 结果值可以直接使用,也可以通过一个变量保存起来然后使用
- 表达式的结果值的类型 取表达式中操作数类型精度最高的类型
6. 运算符
6.1. 算术运算符[掌握]
6.1.1. 算数运算符的符号
- 加法(+)减法(-)乘法 (*) 除法(/) 取模(%)
6.1.2. 算数运算符示例
1) 整数(小数)相除的例子
2) 10/3 =3; 10.0/3=3.33333…
3) 0/0
4) 0.0/0.0
5) 结果是NaN ,任何的NaN都不等于自己(面试题)
6) 1.0/0.0 结果:Infinity,表示无穷大
6.2. 自增自减[掌握]
6.2.1. 自增自减运算符符号
++ --
注意事项:
1) 自增自减只能够用于变量,不能用于常量
2) 自增自减运算的优先级 比 算术运算符 高
学习的方式:通过学习自增自然就可以知道自减
6.2.2. 基本的使用
- 自增运算符作用于自身
3) int i=3;// 表示把3赋值给变量i
4) i++; //表示变量i的值加1,i的值变成4
5) ++i; //表示变量i的值加 1,i的值变成5
- 自增运算符表达式结果赋值给其他变量
1) 1.int i=3;
2) 2.int j = i++;
3) 3.i等于多少,j等于多少?
- 自增运算符表达式结果赋值给自身变量
1) 1.int i=3;
2) 2.int j = ++i;
3) 3.i等于多少,j等于多少?
区别:
把整个表达式看成是一个整体。
如果变量名在前面,那么整个表达式的值就是原来值不变。
如果变量名在后面,那么整个表达式的值就是原来的值加1.
6.2.3. 常见的面试题
int i = 3;
i = i++;
System.out.prinltn(“i = ” + i);
int i = 3;
i = ++i;
System.out.println(“i=” + i);
int i = 3;
int a = i++ + i++ + i++;
int b = ++i + ++i + ++i;
System.out.println(“i=” + i);
System.out.println(“a=” + a);
System.out.println(“b=” + b);
6.2.4. 练习
int i=5;
i++;
System.out.println("i="+i);//i=6
++i;
System.out.println("i="+i);//i=7
int a=++i;
System.out.println("a="+a);//a=8
a = a++;
System.out.println("a="+a);//a=8
a = ++a;
System.out.println("a="+a);//9
int m = 3;
int n = 2 * ++m;//2*4
System.out.println("n="+n);n=8
总结
- 不要把单独的 自增自减 和 有表达式的自增自减搞混淆了
i++;
int j = i++;
- 一定要弄清楚计算规则,表达式的值 和 具体计数器的值的变化是什么
6.3. 赋值运算[掌握]
6.3.1. 赋值运算符的符号
= += -= *= /= %=
6.3.2. 赋值符号的运算顺序
- 从右到左,把符号右边的值赋值到左边的变量中
- 上面 后五个分别看成是一个整体: 例如 += 看成是一个符号,不要看成两个;
int i=3;
i +=2;// 表示把2 累加到变量 i 中
i -=1;
i *=3;
i /=3;
i%=3;
特例:
short s = 3;
s += 2;//存在隐式转换
short s = 3;
s = s+2;//结果值是int,int不能自动转换为short
6.4. 比较运算符[掌握]
6.4.1. 比较运算符符号
== != > < >= <= instanceof
6.4.2. 比较运算符规律
- 比较运算的结果是一个布尔类型的值(true 或false);
System.out.println(3>5);//输出结果为boolean类型
- 特别说明:instanceof 是判断一个对象是否属于某种类类型
思考:是否可以用于我们之前学习的基本数据类型(回忆一下我们之前学习的数据类型除了基本数据类型 还有什么?)
6.5. 逻辑运算符[掌握]
6.5.1. 逻辑运算符符号
& | && || ^ !
6.5.2. 逻辑运算符的作用
- 作用:是应用于多个条件的组合判断。//5>3>1
6.5.3. 逻辑运算符应用示例:
- 例如:小明参加2个学科的考试 java php
java考了一百分并且php考了一百分,奖励欧洲十日游
伪代码描述:java==100并且php==100
java考了一百分或者php考了一百分,奖励国内十日游
伪代码描述:java==100或者php==100
6.5.4. 逻辑运算符运算规则:
& :两边都为true ,结果为true
| :只要有一边为true,结果为true
&& :两边都为true ,结果为true
|| : 只要有一边为true,结果为true
^ : 两边不一样,结果为true ,否则为false,举个例子打印一下
! : 逻辑非,举个例子打印一下
6.5.5. && || 和 & | 区别?
- & | 既可以充当逻辑运算,也可以是位运算符,怎么区分是逻辑运算还是位运算?
根据表达式的结果是否为 布尔类型 来判断
6.5.6. 双与 双或 具有短路行为 什么意思?
- 举个例子
上面小明的考试的成绩 要求是两科都为100分,看到第一科低于100分之后没有必要再看第二科成绩 : 代码表示:Java = 100&& php = 100 (java只考了5分)
如果逻辑运算左边的值能够确定整个逻辑运算表达式的值,那么右边就不执行了,短路了。
&& 何时短路 ? 左边表达式结果为 false
|| 何时短路 ? 左边表达式结果为 true
- 思考:如何验证短路行为?
提示:
右边表达式用 自增自减,例如 ++i = 5
或者使用一个编译正常,运行报错的表达式,例如 1/0
int g = 10;
System.out.println(false&&g++ == 10);//根据&&前面的boolean值,判断后面表达式的值是否执行
System.out.println(g);
- 常见错误:
例如:判断一个整数的变量 a里面的数据 在0-100之间
正确写法: a>0 && a<100
错误写法: 0< a < 100 (java没有这种语法,不支持)
6.6. 位运算符[了解]
6.6.1. 什么是位运算
计算机磁盘二进制位的运算,二进制数据的运算
6.6.2. 位运算符号
& | ^ ~ << >>>>>
位运算就是 二进制的位进行运算。
示例:比如计算 125+176 ,从数学的角度是怎么计算的?
同理,位运算也类似,比如 3&4
可以把1看成是true,把0看成是false
- & :与 位运算,两边为1,结果为1
- | :或 位运算,有一个为1,结果为1
- ^ : 异或,两边不一样,就为1,否则为0
- ~ : 取反,1变成0 ,0 变成1 ~(-5)结果4
- << : 向左位移动,例如1<<3 结果8
- >>: 向右位移动,例如8>>2
- >>>: 无符号向右移动
6.7. 三目运算符[掌握]
6.7.1. 什么是三目运算符
由问号?及冒号:分割的三个表达式,组成的一个表达式如X ? Y : Z ;按照一定规则进行运算的式子,称为表达式;该表达式具有一个结果值:其中
- X :布尔类型的值或者结果为布尔类型的表达式
- Y Z :一般来说数据类型相同的值或者表达式
6.7.2. 运算的规则
X 为true,就是 Y 的结果值 ( 冒号前面的表达式的值):也就是整个三目运算的结果值
X为false,就是Z的结果值 ( 冒号后面的表达式的值):也就是整个三目运算的结果值
注意:
不要受 ? 和 : 的干扰,它们只是一个固定语法格式而已
6.7.3. 三目运算符示例
示例1:
找出两个整型变量中的最大值
示例2:判断一个数是 奇数 还是 偶数
示例3: 例如小明学习java 考试成绩 >=60 显示 非常优秀 否则输出 还有很大的提升空间。

浙公网安备 33010602011771号