数据类型
数据类型的分类
引用数据类型(除基本数据类型之外的,如String )
基本数据类型:4大类8种。
第 1 类:整数型(不带小数的数字):byte,short,int,long
第 2 类:浮点型(带小数的数字):float,double
第 3 类:字符型(文字,单个字符):char
第 4 类:布尔型(真和假):boolean
格式:数据类型 变量名称 = 初始值;
byte a = 1; short a =1; int a =1; char a ="a"; float a =1.1; double a =1.1; long a =1; booleana =true;
注:1字节数(1B)=8比特(8bit)
byte 1B (8位) (8bit) short 2B (16位)(16bit) int 4B (32位)(32bit) char 2B (16位)(16bit) float 4B (32位)(32bit) double 8B(64位)(64bit) long 8B (64位)(64bit) boolean 1B(8位)(8bit) //char可以赋值给int,赋的是ASCII码
自动类型转换:
- 在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再运算。
- 类型范围小的变量,可以直接赋值给类型范围大的变量
- byte short char是直接转换成int类型参与运算的。
强制类型转换
可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
数据类型 变量2 = (数据类型)变量1、数据
int a = 20; byte b = (byte)a;
注意事项
- 强制类型转换可能造成数据(丢失)溢出;
- 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
- 强制类型转换是可以强行将类型范围大的变量、数据赋值给类型范围小的变量。
强制类型转换有哪些需要注意的?
- 可能出现数据丢失。
- 小数强制转换成整数是直接截断小数保留整数
运算符
运算符:对字面量或者变量进行操作的符号。
算术运算符
符号 | 作用 | 说明 |
+ | 加 | |
- | 减 |
* | 乘 | |
/ | 除 | 与“÷”相同,注意:在Java中两个整数相除结果还是整数。 |
% | 取余 | 获取的是两个数据做除法的余数 |
注意:如果两个整数做除法,其结果一定是整数,因为最高类型是整数
+符号做连接符的识别
public static void main(String[] args) { int a = 5 ; System.out.println("abc" + 'a'); // abca System.out.println("abc" + a); // abc5 System.out.println(5 + a); // 10 System.out.println("abc" + 5 + 'a'); // abc5a System.out.println(15 + "abc" + 15); // 15abc15 System.out.println(a + 'a'); // 102 System.out.println(a + "" +'a'); // 5a System.out.println(a + 'a'+" itheima "); // 102 itheima System.out.println("itheima"+ a + 'a'); // itheima5a System.out.println("itheima"+ ( a + 'a' ));// itheima102 }
自增、自减运算符
符号 | 作用 | 说明 |
++ | 自增 | 变量自身的值加1 |
– | 自减 | 变量自身的值减1 |
// 在表达式中或者不是单独操作的情况,++ -- 在变量前后存在区别 // ++ -- 在变量前面。先+1 -1 再使用。 int i = 10; int j = ++i; System.out.println(i); // 11 System.out.println(j); // 11 // ++ -- 在变量的后面 先使用再+1 -1 int m = 10; int n = m++; System.out.println(m); // 11 System.out.println(n); // 10
自增、自减运算符是什么,有什么作用,需要注意什么?
++、–。对当前变量值+1、-1
只能操作变量,不能操作字面量
自增、自减运算符在变量前后有区别吗?
如果单独使用放前后是没有区别的。
非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。
非单独使用:在变量后 ,先使用变量,再进行变量自增/自减
赋值运算符
就是"="。
int a = 10; // 先看“=”右边,把数据10赋值给左边的变量a存储。
扩展赋值运算符
符号 | 作用 | 说明 |
+= | 加后赋值 | a+=b 等价于 a = (a的数据类型)(a+b); 将a + b的值给a |
-= | 减后赋值 | a-=b 等价于 a = (a的数据类型)(a-b); 将a - b的值给a |
*= | 乘后赋值 | a*=b 等价于 a = (a的数据类型)(a*b); 将a ***** b的值给a |
/= | 除后赋值 | a/=b 等价于 a = (a的数据类型)(a/b); 将a / b的商给a |
%= | 取余后赋值 | a%=b 等价于 a = (a的数据类型)(a%b); 将a % b的商给a |
注意:扩展的赋值运算符隐含了强制类型转换。
关系运算符
是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false,true)
符号 | 说明 |
== | a==b,判断a和b的值是否相等,成立为true,不成立为false |
!= | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b, 判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | a<b, 判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
注意:在做相等判断是,千万不要把 == 误写成 =
逻辑运算符
可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果。
符号 | 介绍 | 说明 |
& | 逻辑与 | 必须都是true,结果才是true; 只要有一个是false,结果一定是false。 |
| | 逻辑或 | 只要有一个为true、结果就是true |
! | 逻辑非 | 你真我假、你假我真。 !true=false 、 !false= true |
^ | 逻辑异或 | 如果两个条件都是false或者都是true则结果是false。两个条件不同结果是true。 |
double A = 9; double B = 6; // 需求:A大于等于6.5 B要大于等于8 // 注意:必须前后都是true结果才是true System.out.println("------- 与:& --------"); System.out.println(A >= 6.5 & B >=8); // 需求:要么A大于等于8 要么B大于等于6.5 // 注意:只要有一个是true 结果就一定是true System.out.println("------- 或:| --------"); System.out.println(A >= 6.5 | B >=8); System.out.println("------- 非:! --------"); System.out.println(!true); System.out.println(!false); // 逻辑异或:必须两个不同结果才是true System.out.println("-------异或:^ --------"); System.out.println(false ^ true); // true System.out.println(true ^ false); // true System.out.println(true ^ true); // false System.out.println(false ^ false); // false
短路逻辑运算符
符号 | 介绍 | 说明 |
&& | 短路与 | 判断结果与“&”一样。过程是左边为false**,右边则不执行。** |
|| | 短路或 | 判断结果与“|”一样。过程是左边为true**, 右边则不执行。** |
注意:逻辑与 “&” 、逻辑或“|”: 无论左边是 false还是 true,右边都要执行。
System.out.println("-----------&& & || |的区别-------------------"); int a = 10; int b = 20; // System.out.println(a > 100 && ++b > 10); System.out.println(a > 100 & ++b > 10); System.out.println(b); int i = 10; int j = 20; //System.out.println(i > 2 || ++j > 10); System.out.println(i > 2 | ++j > 10); System.out.println(j);
逻辑运算符有哪些,有什么特点?
逻辑与“&” :有一个为false、结果是false
短路与&&: 一个为false、结果是false。前一个为false,后一个条件不执行了
逻辑或“|”:有一个为true、结果是true
短路或||:一个为true、结果是true。前一个为true,后一个条件不执行了
逻辑非“!”:!false=true、 !true=false
逻辑异或“^” :相同是false、不同是true。
注意:实际开发中、常用的逻辑运算符还是:&& 、 || 、 !
三元运算符
格式:条件表达式 ? 值1 : 值2;
执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
案例-求三个整数的最大值
需求:定义三个整数,找出最大值并打印在控制台。
分析:
- 用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
num1 > num2 ? num1 : num2; - 用三元运算符,让临时最大值,和第三个整数,进行比较,并记录结果。
temp > num3 ? temp : num3;
- 输出结果
int num1 = 10;int num2 = 30;int num3 = 20; int temp = (num1 > num2) ? num1 : num2; max = (temp > num3) ? temp : num3; 或者 int max = ((num1 > num2 ? num1 : num2) > num3) ? (num1 > num2 ? num1 : num2) : num3;(建议不用这种) System.out.println(max);
运算符优先级