10.类型转换
自动提升,手动下降
10.1自动类型转换
自动类型转换
1.两种类型要兼容 数值与数值类型兼容 char类型也可以存储数值2.目标类型(等号左边)取值范围大于源类型(等号右边)
提升规则:byte、short、char—–>int ——>long——>float——->double
byte、short、char之间运算提升为int
public class Test1{
public static void main(String [] args ){
//自动类型转换
//1.目标类型(等号左边)取值范围大于源类型(等号右边)
byte b1 = 20;
short s1 = b1;
System.out,println(s1);
short s2 = 2356;
int i1 = s2;
System.out.println(i1);
int i2 = 12345;
long l1 = i2;
System.out.println(l1);
long l2 = 123456L;
float f1 = l2;
System.out.println(f1);
float f2 = 123.0F;
double d1 = f2;
System.out.println(d1);
}
}
public class Test2{
public static void main(String [] args){
//自动类型转换中 byte、short、char之间运算,自动提升为int型
byte b2 = 23;
short s2 = 56;
int i3 = b2 + s2;
System.out.prinitln(i3);
char ch1 = '天';
short s3 = 12;
int i4 = ch1 + s3;
System.out.println(i4);
}
}
10.2强制类型转换
强制类型转换
1.两种类型要兼容
2.目标类型(等号左边)取值范围小于源类型(等号右边)整数长度足够,数据完整。
整数长度不够,数据截断。(符号位变化,可能变为负数)
public class Test1{
public static void main(String [] args){
System.out.println("----------------强制类型转换------------------");
//强制类型转换
//1.两种类型要兼容
//2.目标类型(等号左边)取值范围小于源类型取值范围(等号右边)
System.out.println("================范围内强制转换==================");
//范围内强制转换不损失
short s11 = 120;
byte b11 = (byte)s11;
System.out.println(b11);
int i11 = 5689;
short s22 = (short)i11;
System.out.println(s22);
long l11 = 567845;
int i22 = (int)l11;
System.out.println(i22);
float f11 = 3.14F;
long l22 = (long)f11;
System.out.println(l22);
double d11 = 20.5;
float f22 = (float)d11;
System.out.println(f22);
int a = 23;
byte b = (byte)a;
System.out.println(b);
System.out.println("=================超范围强制转换=================");
//超范围强制转换补码损失
short ss1 = 257;
byte bb1 = (byte)ss1;
System.out.println(bb1);
short ss3 = 128;
byte bb2 = (byte)ss3;
System.out.println(bb2);
short ss4 = 129;
byte bb3 = (byte)ss4;
System.out.println(bb3);
char ch1 = 'A';
System.out.println(ch1 + 1); // 66 B
System.out.println(ch1 -1);
}
}
11.运算符
11.1算术运算符
++或者– 如果单独作为一条语句书写 在前在后没有区别
++或者– 如果不是单独一条语句
如果++或者–在前 先执行++或者– 再执行其他的
如果++或者–在后 先执行其他的 再执行++或者–
public class Test1{
public static void main(String [] args){
System.out.println("-----------算术运算符 -----------------");
System.out.println("----------- + - * / %---------------");
//两个操作数 算术运算符+ - * / %
int a = 10;
int b = 20;
int c = 30;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); // 不能保存小数
System.out.println(a % c);
System.out.println("----------- ++(自增) --(自减)---------------");
//一元算术运算符++(自增) --(自减)
// ++或者-- 如果单独作为一条语句书写 在前在后没有区别
int a1 = 10 ;
a1++;
System.out.println(a);
int c1 = 10;
++c1;
System.out.println(c1);
int b1 = 15;
b1--; // b = b - 1;
System.out.println(b1);
int d1 = 15;
--d1;
System.out.println(d1);
// ++或者-- 如果不是单独一条语句
// 如果++或者--在前 先执行++或者-- 再执行其他的
// 如果++或者--在后 先执行其他的 再执行++或者--
int e = 10;
int f = e++;
System.out.println(f);
System.out.println(e);
int k = 10;
int m = ++k;
System.out.println(m);
System.out.println(k);
int h = 15;
int j = h--;
System.out.println(j);
System.out.println(h);
}
}
11.2赋值运算符
public class Test1{
public static void main(String [] args){
System.out.println("================赋值运算符================");
// 赋值运算符
int a = 10; // 将等号右边赋值给等号左边
a += 10; // a = a + 10;
System.out.println(a);
a -= 5; // a = a - 5;
System.out.println(a);
a *= 6; // a = a * 6;
System.out.println(a);
a /= 3; // a = a / 3;
System.out.println(a);
a %= 2; // a = a % 2;
System.out.println(a);
System.out.println("---------- a +=10; 与 a = a + 10;的区别----------------");
short s1 = 10;
s1 += 10; //类型不会提升
int s2 = s1 + 10; //自动类型提升
System.out.println("short型:/t" + s1);
System.out.println("int型:/t" + s2);
byte b1 = 10;
b1 += 10; //类型不会提升
int i2 = b1 + 20; //自动类型提升
System.out.println("byte型:/t" + b1);
System.out.println("int型:/t" + i2);
}
}
11.3关系运算符
关系运算符 最终结果都为布尔类型
public class RelationOpreator{
public static void main(String [] args){
System.out.println("================关系运算符================");
//关系运算符 最终结果都为boolean类型
int a = 40;
int b = 50;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <=b );
System.out.println(a == b);
System.out.println(a != b);
}
}
11.4逻辑运算符
//逻辑运算符
&& 短路与 同真为真(其他为假)第一个假短路
& 逻辑与 同真为真(其他为假)
|| 短路或 同假为假(其他为真)第一个为真短路
| 逻辑或 同假为假(其他为真)
public class Test1{
public static void main(String [] args){
//逻辑运算符
// && 短路与 要求两个或多个表达式都成立 则结果为真
// 短路与 有短路的效果 如果第一个条件不成立 则后续的条件不再执行
// & 逻辑与 要求两个或多个表达式都成立 则结果为真 没有短路效果
// || 短路或 要求两个或者多个表达式有一个成立 则结果为真
// 短路或 有短路的效果 如果第一个条件已经成立 则后续的条件不再执行
// | 逻辑或 要求两个或者多个表达式有一个成立 则结果为真 没有短路效果
int a = 15;
int b = 20;
int c = 22;
System.out.println("--------短路与---------");
System.out.println(a < b && b < c); //true
System.out.println(a > b && b < c);//false
System.out.println("--------逻辑与---------");
System.out.println(a < b & b < c);//true
System.out.println(a > b & b < c);//false
System.out.println("=======================");
System.out.println("--------短路或---------");
int d = 22;
int e = 33;
int f = 44;
System.out.println(d > e || e < f); //true
System.out.println(d > e || e > f); //false
System.out.println("--------逻辑或---------");
System.out.println(d > e | e < f); //true
System.out.println(d > e | e > f); //false
int x = 6;
int y = 7;
int z = 7;
System.out.println((y-- == x) && (--y != x));//false
System.out.println(y); //6
System.out.println((z-- == x) & (--z != x));//false
System.out.println(z); //4
int j = 10;
int k = 11;
int l = 10;
System.out.println((++j == k) || (++j == k));//true
System.out.println(j); //11
System.out.println((++l == k) | (++l == k));//true
System.out.println(l); //12
}
}
public class Test2{
public static void main(String [] args){
// ! 非
boolean bl1 = !true;
boolean bl2 = !false;
System.out.println(bl1);
System.out.println(bl2);
System.out.println(!true);
System.out.println(!false);
// 三目(三元)运算符 布尔表达式 ? 结果1 : 结果2
System.out.println(20 == 20 ? "条件成立" : "条件不成立");
int age = 19;
System.out.println(age >= 18 ? "成年了" : "未成年");
int a = 20;
int b = a >= 20 ? 55 : 66;
System.out.println(b);
}
}
11.5
public class Test1{
public static void main(String [] args){
// 位运算符
// 左移:在有效的范围以内,左移几位表示乘以2 的几次方
System.out.println(1 << 1);
System.out.println(1 << 2);
System.out.println(1 << 3);
System.out.println(1 << 4);
System.out.println(1 << 5);
System.out.println(1 << 32);
System.out.println("------------------------------------------");
// 右移:在有效的范围内 右移几位 表示除以2的几次方
System.out.println(8 >> 2);
System.out.println(8 >> 10);
System.out.println(-1 >> 100);
System.out.println(-20 >> 2); // -5
// >>> 无符号右移
System.out.println(-20 >>> 2);
System.out.println(20 >>> 3);
// & 与 二进制相同位 都为1 结果为1 其他都为0
System.out.println(10 & 30);
// | 或 二进制相同位 有一个为1 或者两个都为1 结果为1 其他为0
System.out.println(10 | 30);
// ^ 异或 二进制相同位 相同为0 不同为1
System.out.println(10 ^ 30);
// ~ 取反 每一位 0改为1 1改为0
System.out.println(~30);
// 整数的四种表示形式
// 二进制 0B binary
int i1 = 0B11;
System.out.println(i1);
int i2 = 20;
// 八进制 以0开头
int i3 = 012;
System.out.println(i3);
// 十六进制 0X开头
int i4 = 0XA3DF;
System.out.println(i4);
}
}
12.变量的命名规范
字下美人数骆驼
字:字母
下:下划线
美:美元符号$
人:人民币符号¥
数:数字
骆驼:驼峰命名 studentNameAndAge
可以以字母、下划线、美元符号、人民币符号开头,可以包含数字,不能以数字开头,见名知义,有意义
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/272704.html