Java的基本数据类型和运算符
前言
Java中的数据类型分为两种,分别是基本数据类型和引用数据类型,本文只讲解基本数据类型,引用数据类型后面会详细讲解,其中基本数据类型又会有自动类型的转换和强制类型的转换两种方式,又会涉及到数据的值的运算,所以也会学习运算符的使用
一、基本数据类型
基本数据类型分为四类八种:
- 整数类型:byte、short、int、long
- 浮点数类型:float、double
- 布尔类型:boolean
- 字符类型:char
数据类型 | 所占字节 | 范围 |
---|---|---|
byte | 1 | -128~127 |
short | 2 | -32768~32767 |
int(默认) | 4 | -2147483648~2147483647 (10位数,大概21亿多) |
long | 8 | -9223372036854775808 ~ 9223372036854775807 (19位数) |
float | 4 | 1.401298 E -45 到 3.4028235 E +38 |
double(默认) | 8 | 4.9000000 E -324 到1.797693 E +308 |
boolean | 1 | true / false |
char | 2 | 0-65535 |
注意事项:
1、整数的默认类型是int,小数的默认类型是double
2、float类型的后面一定要加f/F,当long类型变量的值超过int类型的范围时要加小写l/L
3、Java是强类型语言,对数据类型的要求十分严格,一种数据类型的变量只能装载这个数据类型是字面量,否则会出现报错,而且进行赋值运算时,等号两边的数据类型一定要一样,不然也会出现报错
二、数据类型的转换
前置知识:基本数据类型的范围排序
1、byte->short->int->long->float->double
2、char->int->long->float->double
2.1 自动类型转换
什么是自动类型转换呢?
范围小的数据类型转换为数据大的数据类型,不会导致精度和数据的缺失
正常情况下,表达式中所有的不同的数据类型都自动提升为表达式中数据类型范围最大的类型
public class Demo01 {
public static void main(String[] args) {
byte A = 10;
int B = 200;
float C = 13.14f;
double D = A + B + C;
System.out.println("D = " + D);
}
}
特殊情况下,表达式中只有byte、short、char这三种类型,一律转换成int的数据类型再进行运算
public class Demo01 {
public static void main(String[] args) {
byte A = 10;
short B = 20;
char C = 'a';
int D = A + B + C;
System.out.println("D = " + D);
}
}
2.2 强制类型转换
什么是强制类型转换呢?
通俗来讲就是大范围的类型转换为小范围的类型
格式:目标数据类型 变量名 = (目标数据类型) 数据
public class Demo01 {
public static void main(String[] args) {
double A = 10.0;
//double类型的数据强制转换成int类型
int B = (int) A;
System.out.println("B = " + B);
}
}
注意事项:
1、浮点类型转换为整数类型会导致小数部分的数据缺失
public class Demo01 {
public static void main(String[] args) {
double A = 13.14;
//double类型的数据强制转换成int类型
int B = (int) A;
System.out.println("B = " + B);
}
}
2、相互强制转换时,可能会发生精度的缺失,就是当范围大的类型转换成范围小的类型时,如果范围大类型的值超过了范围小类型的范围时,就会发生精度丢失
public class Demo01 {
public static void main(String[] args) {
int A = 200;
byte B = (byte) A;
System.out.println("B = " + B);
}
}
三、运算符
3.1 算数运算符
运算符 | 作用 |
---|---|
+ | 两边无字符串时为数据相加,有字符串时为字符串的拼接 |
- | 两数据相减 |
* | 两数据相加 |
/ | 两数据相除,整数和整数相除为整数,当有小数参与时为小数 |
% | 两数据相除结果取余数 |
3.2 赋值运算符
运算符 | 形式 | 作用 |
---|---|---|
= | a = b | 把等号右边变量的值赋予左边的变量(用得最多,没有强制类型转换) |
+= | a += b | a = (a的类型)(a+b) |
-= | a -= b | a = (a的类型)(a-b) |
*= | a *= b | a = (a的类型)(a*b) |
/= | a /= b | a = (a的类型)(a/b) |
%= | a %= b | a = (a的类型)(a%b) |
3.3 自增运算符
运算符 | 作用 |
---|---|
i++ | 自增1 |
++i | 自增1 |
i- - | 自减1 |
- -i | 自减1 |
注意事项:
1、单独使用:i++(i- -)和++i(- -i)没有区别
2、混合使用:以自增为例,自减也如此。i++先参加运算再自增;++i先自增在参加运算
public class Demo01 {
public static void main(String[] args) {
int i = 10;
int j = i++;
System.out.println("i = " + i);
System.out.println("j = " + j);
}
}
public class Demo01 {
public static void main(String[] args) {
int i = 10;
int j = ++i;
System.out.println("i = " + i);
System.out.println("j = " + j);
}
}
3.4 逻辑运算符
运算符 | 作用 |
---|---|
& | 左右要都为true才为真 |
| | 左右只要有一个为true就为真 |
^ | 异或:相同为false,不同为true |
&& | 作用和&一样,只是当左边为false时不会执行右边 |
|| | 作用和 | 一样,只是当左边为true时不会执行右边 |
3.5 三元运算符
格式:表达式?值1:值2
作用:当表达式为true时返回值1,为false时返回值2
public class Demo01 {
public static void main(String[] args) {
String str = 8%2==0?"偶数":"奇数";
System.out.println("str = " + str);
}
}
3.6 关系运算符
运算符 | 作用 |
---|---|
== | 比较两个数据的值是否相同 |
!= | 比较两个数据是否不相同 |
> | 比较左边的数据是否大于右边的数据 |
>= | 比较左边的数据是否大于等于右边的数据 |
< | 比较左边的数据是否小于右边数据 |
<= | 比较左边的数据是否小于等于右边的数据 |
3.7 运算符的优先级
补充:优先级太多了,一般只记优先级最高的(),和优先级最低的 =
特殊重点:逻辑运算符的优先级我们重点记一记 : & > ^ > | > && > ||
四、总结
通过本文(又到了总结时间,有点煎熬),我们学习到了Java两大类型之一的基础数据类型,共有四类八种,我们知道Java是一种强类型语言,对数据的类型规定十分的严格,不过我们工作业务中也会涉及类型的转换,所以Java为我们提供了自动类型转换和强制类型的转换,为我们提供了类型转换的方法,不过强制类型转换可能会出现数据丢失的情况,所以要小心使用。在我们计算数据的时候,运算符是必不可少的一部分,在这里我们学习了六种运算符类型,特别要注意逻辑运算符的&&和||有短路的功能,还有运算符的优先级,因为实在太多了,我们只记住最高的括号()和最低的等号=即可,特别要记住的还有逻辑运算符的优先级,这是我们比较常用的。好了,还是那句话,虚心接受批评,如果对你有帮助的话,记得给个点赞。