Java基础语法
1.基础语法转换
在Java中,⼀些数据类型之间是可以相互转换的。分为两种情况:⾃动类型转换和强制类型转换。
1.1隐式类型转:俗称自动类型转换
int num=10;//定义一个变量并且赋值
double num1=num;//将int类型的值赋值给double类型 隐藏了一个隐式类型转换。
System.out.println(num1);
类型范围大小的关系图;(从小到大)。
byte<--short<--==char<--int<--long<--float<--double.
注意:整形默认的类型为:int,如果byte ,short,char类型参与到运算的时候会在底层自动转为int类型(隐式类型转换)。切记Boolean类型时无法参与类型转换的。
例如:
byte num=10;
byte num1=20;
//声明两个byte类型的变量
byte num2=num+num1;
//这样会报异常 类型不兼容
System.out.println(num2);
//正确的书写格式
int num3=num+num1;
System.out.println(num3);
//或者
byte num4=(byte)num+num1;
System.out.println(num4);
//或者
byte num1+=num;//+=不用考虑类型大小的问题 它会自动给你转换
System.out.println(num1);
1.2强值类型转换
double num1 = 5.5;
int num2 = (int) num1; // 将double类型的num1强制转换为int类型
System.out.println(num2); // 输出5(⼩数位直接舍弃)
注意: 强制类型转化会损失精度的。例如:num2的值应该是5.5,可是打印的值是5。
1.3类型转换案例
byte num=1;
byte num1=2;
byte num2=num+num1;
//这样写会报异常 因为byte参加了运算 会自动转换为int类型
byte num3=1+2;
//这样不会报异常 只要不超出byte范围即可
2.运算符
2.1算数运算符
例如:
int num = 10;
int num1 =20;
int num2=num+num1;//+号是运算符 并且是算数运算符
// num+num1是表达式由于+是算数运算符所以这个式子称之为算数表达式
System.out.println(num2);
符号 | 作用 | 说明 |
+ | 加 | 找一年的同学去 |
- | 减 | 找一年的同学去 |
* | 乘 | 找一年的同学去 |
/ | 除(取商) | 找一年的同学去 |
% | 除(取余) | 找一年的同学去 |
int num = 10;
System.out.println(num/3);
//打印结果为3
System.out.println(num/3);
打印结果为1
2.3自增自减运算符
符号 | 作用 | 理解 |
++ | 自增 | 自身加1 |
-- | 自减 | 自身减1 |
提示:
1.++和-- 既可以放在变量的后边,也可以放在变量的前边
2.++(++i)在前先自增后取值,++(i++)在后先取值后自增。
3.单独使用的话,无论放在前面还是后面 运行结果都是一样的。
4.最常见的用法就是:单独使用。
//单独使用的时候 ++在前
int a=10;
a++;
System.out.println("a:"+a);//结果为:a:11。
// ++在后的时候
int b=10;
++b;
System.out.println("b:"+b);//结果为:b:11。
int x = 10;
//参与赋值的时候
int y = x++; // 赋值运算,++在后边,所以是使⽤x原来的值赋值给y,x本身⾃增1
System.out.println("x:" + x + ", y:" + y); // x:11,y:10
int m = 10;
int n = ++m; // 赋值运算,++在前边,所以是使⽤m⾃增后的值赋值给n,m本身⾃增1
System.out.println("m:" + m + ", m:" + m); // m:11,m:11
2.3.赋值运算符
赋值运算符的理解:是将⼀个表达式的值赋给左边,左边必须是可修改的,不能是常量。
符号 | 作用 | 理解 |
= | 表示赋值 | 将等号右边的值赋值给左边的变量(a=10); |
+= | 表示加后再赋值 | 左边的一个变量加上一个值或者赋值过后的变量,将相加后的值赋值给左边的变量。(int a+=10)。 |
-= | 表示减后再赋值 | 左边的一个变量减去一个值或者赋值过后的变量,将相减后的值赋值给左边的变量。(int b-=10)。 |
*= | 表示乘后再赋值 | 左边的一个变量乘上一个值或者赋值过后的变量,将相乘后的值赋值给左边的变量。(int c*=10)。 |
/= | 表示除后取商再赋值 | 左边的一个变量除上一个值或者赋值过后的变量,将除后的商赋值给左边的变量。(int d/=10)。 |
%= | 表示除后取余再赋值 | 左边的一个变量除上一个值或者赋值过后的变量,将相除后的余数值赋值给左边的变量。(int f%=10)。 |
小提醒:赋值运算符隐藏了隐式类型转换和强制类型转换哟。
示例:
byte num =10;
num = num +20;//这样写会报异常 类型不兼容 因为byte参与运算的情况下会在底层自动转换成int类型。
System.out.println(num);
num +=20;//这样写就不会报异常 因为+=隐藏了强制类型转换 这样写相当于 num =(byte)num+20;
System.out.println(num);
2.4关系运算符
关系运算符有六种:大于,小于,等于,大于等于,小于等于,不等于。
符号 | 作用 | 说明 |
> | 表示大于 | 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。 |
注意:
1.关系运算符的返回值类型为Boolean类型,要么为true,要么为false。
2.千万不要把"=="写成"=",这样就成为赋值运算符喽哟。
3.如果是判断字符串的话就不能使用==号,必须使用equals。
2.5逻辑运算符
符号 | 作用 | 说明 |
& | 逻辑与 | 表达式1&表达式2,表达式1和2如果一个或都为true,返回值为true,如果有一个为false,返回值为false。 |
| | 逻辑或 | 表达式1|表达式2,表达式1和2如果有一个为true另一个为false,返回值为true,如果都为false,返回值为false。 |
^ | 逻辑异或 | 表达式1&表达式2,表达式1和2如果一个为true一个为false,返回值为true,如果都为true或false,返回值为false。 |
! | 逻辑非 | 当操作原的值为false的时候结果为true ,反之结果为true的时候结果为false。 |
示例:
int j = 20;
int k = 30;
//& “与”,并且的关系,只要表达式中有⼀个值为false,结果即为false
System.out.println((i > j) & (i > k)); //false & false,输出false
System.out.println((i < j) & (i > k)); //true & false,输出false
System.out.println((i > j) & (i < k)); //false & true,输出false
System.out.println((i < j) & (i < k)); //true & true,输出true
2.6短路逻辑运算符
符号 | 作用 | 说明 |
&& | 短路与 |
作⽤和
&
相同,但是有短路效果
|
|| | 短路或 |
作⽤和|
相同,但是有短路效果
|
在短路与中只要有⼀个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都 计算出来,短路与操作就有这样的效果,可以提⾼效率。同理在逻辑或运算中,⼀旦发现值为true,右边的表达式将不再参与运算。
小提醒:
- 逻辑与&,⽆论左边真假,右边都要执⾏。
- 短路与&&,如果左边为真,右边执⾏;如果左边为假,右边不执⾏。
- 逻辑或|,⽆论左边真假,右边都要执⾏。
- 短路或||,如果左边为假,右边执⾏;如果左边为真,右边不执⾏。
逻辑运算符和比较运算符和关系运算符的区别:比较运算符和关系运算符两个操作的对象是布尔类型 而位运算符操作的可以是整数类型和char类型。
如果操作的是char类型的话编译器会自动将char类型转换成ASCII码值来进行计算。
2.6移位运算符
也是针对整数类型的 也可以是char类型 但是进行char使用的话他会自动转化为ASCII码值。但是值得注意的是对byta short char的话会自动升级为int类型 再来进行运算。
符号 | 作用 | 理解 |
<< | 左移运算符 | 左边最高位丢弃 右边补去0。向左移动几位就是乘以2的几次方。 |
>> | 右移运算符 | 右边最高位是0,则左边补齐0,最高为是1则左边补齐1。向右移动几位就是除以2的几次幂。 |
>>> | 无符号右移运算符 | 无论最高位是0还是1 左边都会补齐0. |
2.7三元运算符
三元运算符的格式为:(条件表达式)?表达式一:表达是二;
怎样运行:如果条件表达式为true 则运行表达式一,反之运行表达式二。
示例:
public class OperatorTest02 {
public static void main(String[] args) {
//1:定义三个变量⽤于保存和尚的身⾼,单位为cm,这⾥仅仅体现数值即可。
int height1 = 150;
int height2 = 210;
int height3 = 165;
//2:⽤三元运算符获取前两个和尚的较⾼身⾼值,并⽤临时身⾼变量保存起来。
int tempHeight = height1 > height2 ? height1 : height2;
//3:⽤三元运算符获取临时身⾼值和第三个和尚身⾼较⾼值,并⽤最⼤身⾼变量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//4:输出结果
System.out.println("maxHeight:" + maxHeight);
} }
3.运算符的优先级与综合方向
优先级 | 含义 | 运算符 | 结合方向 |
1 | 分隔符 | [],() | 由左至右 |
2 | 单目运算符,字符串运算 | ++,--,+(一元),-(一元),~,!(类型转换符) | 由右至左 |
3 | 算数乘除运算 | *,/,% | 由左至右 |
4 | 算式加减运算符 | +,- | 由左至右 |
5 | 比较运算符 | >,<,>=,<=,!= | 由左至右 |
..... | ....... | ........ | ..... |