一、基本数据类型(四类八种)
(一)整数型
byte(1字符)、short(2字符)、int(4字符)、long(8个字符)
(二)浮点数型
float(4个字符)、double(8个字符)
(三)字符型
char(2个字符)
(四)布尔类型
boolean(1个字符)
其中大小 byte <=== short <=== int <=== long <=== float <=== double 在后面类型转化会用到。
二、运算符
(一)、算数运算符
+、-、*、/、% 其中前四个就是小学学习的加减乘除、最后一个为取余,就是计算两个数的余数,例如5%3的结果为2。其中%可以用来判断该数是否为偶数、奇数还可以作为循环的判断条件等等。在进行计算的时候可能会有数据类型的变化,例如如下:
int i = 6;
double b = 10.0;
System.out.println(i+b);
int类型与double类型相加最后结果会是什么呢?没错正如你所想是double类型。为什么会这样呢?接下来就要引出隐式转换与强制转化。
1.隐式转换(两个提升规则)
程序会自动进行转换
其一,类型小的会先转换为类型大的,然后两者在进行计算。
其二,byte、short、char这三个在进行计算的时候会先提升为int类型,而后在进行计算。
2.强制转换
就是将类型大的转换为小的,这个需要在转化的数据前面加上要强转的类型,如下代码所示
int a = (int) 10.0;
10.0为double类型,强制转化为int类型,如果前面不加(int)程序在编译阶段就会给你提示爆红。在使用强制转换的时候有时候会出现错误例如如下,byte类型最大值为127,这样转换不就会出问题,就好比你在1L的杯子里面装3L水,是一样的道理。
byte by = (byte) 129;
(二)、自增自减运算符
自增++,自减--这两个可以放在变量的前面,也可以放在变量的后面。有两种使用情况:
第一,单独占一行,这个就相当于变量+1或-1,代码如下:
int a = 1;
a++;
System.out.println(a);//2
++a;
System.out.println(a);//3
第二,参与运算
如果++或--在前面,则先计算后使用。
如果++或--在后边面,则先使用后计算。
以++为例,代码如下:
int a = 1;
int b = a++;
int a1 = 1;
int b1 = ++a1;
//b:1-------------b1:2
System.out.println("b:"+b+"-------------"+"b1:"+b1);
下面是自增自减的一个小练习,可以自己试着思考一下:
int x = 10;
int y = x++;
int z = ++x;
System.out.println("x"+x);
System.out.println("y"+y);
System.out.println("z"+z);
(三)、赋值运算符
=、+=、-=、*=、/=、%=,除了等于其余的几个在运算的时候有一个小细节,具体如下代码所示:
byte b = 1;
b += 1;
System.out.println("b:"+b);
b为byte类型,在使用+=时候相当于b =(byte)(b + 1),由于byte在运算时候会先转化为int与1进行相加,而后再将int类型值付给byte类型(int===>byte大类型转为小类型,此时就要用到强制类型转换),这几个赋值运算符底层隐藏了强制类型转换。
(四)、关系运算符
==、>、<、!=、>=、<=运算结果均为boolean类型,要么是true要么是false
(五)、逻辑运算符
&(逻辑与)、|(逻辑或)、^(逻辑异或)、!(逻辑非)
符号 | 说明 |
& | 只有两边都是true结果才是true,其余都是false |
| | 只有两边都是false结果才是false,其余都是true |
^ | 相同为false,不同为true |
! | 取反 |
(六)、短路逻辑运算符
&&(短路与)、||(短路或)
符号 | 说明 |
&& | 当左边为false时,右边的不执行 |
|| | 当左边为true时,右边的不执行 |
(七)、三元运算符(三目运算符)
格式:关系表达式?表达式1:表达式2;
解释:如果表达式结果为true则执行表达式1,为false则执行表达式2
注意点:三目运算符的结果必须被使用,不使用则编译阶段会报错
示例代码如下(求三个数中的最大值):
int a=1,b=2,c=3;
int d = a>b?((a>c)?c:a):((b>c)?b:c);