目录
1.八种基本类型
byte char short int long float double boolean
1.1基本类型的使用
数据类型 变量名 = 初始值 ;int a = 1024;注意:每种数据类型都有大小如果超过了相应的大小则会报错
//可以定义类型并赋值;
int i = 1;
short sh=127;
float f = 123;
byte b =127;
char c = '帅';
long l = 1024;
double d = 2;
boolean bl =true;//(boolean类型默认false)
//也可以直接定义类型,并不赋值,但在使用的时候,如果没有赋值编译器会报错;
int ii ;
short shsh;
float ff;
byte bb ;
char cc;
long ll ;
double dd ;
boolean blbl ;
1.2精度转换
不同的类型有不同的取值范围,一旦超过了相应的范围则会丢失精度,不过有大范围的类型可以包含小类型的数值,而反之可能会丢失精度.
例:
// int jingdu = i + sh;
// short shshsh = i+sh;
// System.out.println(jingdu);
// System.out.println(shshsh);
int jd = 3/2;
System.out.println(jd);//此处打印1,丢失了0.5 因为jd是int类型在运算后无法保存小数,如果修改jd为double类型的话,则可以正常打印1.5
1.3类型转换
自动类型转换即: 代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点:数据范围小的转为数据范围大的时会自动进行 。强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。
//自动类型转换
int zd = 99;
long dz = 100;
zd = dz; //zd 和 dz都是整形,zd的范围小dz的范围大,当将dz赋值给zd时,有可能发生数据丢失,所以报错
dz = zd;//此处编译器将zd提升为long类型,然后赋值
float fff = 3.14F;
double ddd = 5.12;
ddd = fff; // 编译器会将fff转换为double,然后进行赋值
fff = ddd; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
//强制类型转换
//数据范围大的数据转换成数据范围小的类型
zd = (int)dz;//刚刚不能转的,现在能了不过还是可能发生数据丢失
int int1 = 1024;
byte byte1 = 1;
byte1 = (byte) int1;
System.out.println(byte1);//可以打印,不过数据丢失
boolean flag = true;
int1 = flag; // 编译失败:类型不兼容
flag = int1; // 编译失败:类型不兼容
注意:
1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查4. 强制类型转换不一定能成功,不相干的类型不能互相转换
1.4类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。1. int 与 long 之间: int 会被提升为 long2. byte 与 byte 的运算
//类型提升
int CCC =int1 + dz; //int +long--->long+long赋值给int类型时会丢失数据 如果你给int+dz的值转成int的话,则可以正常执行
long dddd= int1 +dz;//接受的dddd是longl类型的所以不会报错
byte byte11 = 10;
byte byte2 = 20;
byte byte3 =byte11 + byte2;//byte11 + byte2会将他们提升为int类型在计算,得到的结果为int类型,
// 赋值给比byte所以会出错,解决方法byte11 + byte2的和转位int类型,or用int类型来接受
//例: byte3 = (int)(byte11+byte2);
System.out.println(byte3);
1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算 .
完整代码:
public class Test {
public static void main(String[] args) {
//可以定义类型并赋值;
int i = 1;
short sh=127;
float f = 123;
byte b =127;
char c = '帅';
long l = 1024;
double d = 2;
boolean bl =true;//(boolean类型默认false)
//也可以直接定义类型,并不赋值,但在使用的时候,如果没有赋值编译器会报错;
int ii ;
short shsh;
float ff;
byte bb ;
char cc;
long ll ;
double dd ;
boolean blbl ;
//每种数据类型都有大小,超过了编译器会报错 例:
// short sss = 1024;
// int jingdu = i + sh;
// short shshsh = i+sh;
// System.out.println(jingdu);
// System.out.println(shshsh);
int jd = 3/2;
System.out.println(jd);//此处打印1,丢失了0.5 因为jd是int类型在运算后无法保存小数,如果修改jd为double类型的话,则可以正常打印1.5
//自动类型转换
int zd = 99;
long dz = 100;
zd = dz; //zd 和 dz都是整形,zd的范围小dz的范围大,当将dz赋值给zd时,有可能发生数据丢失,所以报错
dz = zd;//此处编译器将zd提升为long类型,然后赋值
float fff = 3.14F;
double ddd = 5.12;
ddd = fff; // 编译器会将fff转换为double,然后进行赋值
fff = ddd; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
//强制类型转换
//数据范围大的数据转换成数据范围小的类型
zd = (int)dz;//刚刚不能转的,现在能了不过还是可能发生数据丢失
int int1 = 1024;
byte byte1 = 1;
byte1 = (byte) int1;
System.out.println(byte1);//可以打印,不过数据丢失
boolean flag = true;
int1 = flag; // 编译失败:类型不兼容
flag = int1; // 编译失败:类型不兼容
//类型提升
int CCC =int1 + dz; //int +long--->long+long赋值给int类型时会丢失数据 如果你给int+dz的值转成int的话,则可以正常执行
long dddd= int1 +dz;//接受的dddd是longl类型的所以不会报错
byte byte11 = 10;
byte byte2 = 20;
byte byte3 =byte11 + byte2;//byte11 + byte2会将他们提升为int类型在计算,得到的结果为int类型,
// 赋值给比byte所以会出错,解决方法byte11 + byte2的和转位int类型,or用int类型来接受
//例: byte3 = (int)(byte11+byte2);
System.out.println(byte3);
}
}
2.运算符的介绍
2.1算数运算符
基本四则运算符:加减乘除模 (+ - * / %)
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
增量运算符 += -= *= %=
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出4
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出1
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出1
a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出1
自增自减运算符
int t = 1;
t++; // 后置++ 表示给t的值加1,此时t的值为2
System.out.println(t++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(t); // 输出3
++t; // 前置++ 表示给t的值加1
System.out.println(++t); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(t); // 输出5
2.2 关系运算符
关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false
int n = 10;
int m = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(n == m); // false
System.out.println(n != m); // true
System.out.println(n < m); // true
System.out.println(n > m); // false
System.out.println(n <= m); // true
System.out.println(n >= m); //false
2.3 逻辑运算符
1. 逻辑与 &&
System.out.println(a == 2 && b == 1); // 左为真 且 右为真 则结果为真
System.out.println(a == 2 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 1); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
2. 逻辑 或 ||
System.out.println(a == 2 || b == 1); // 左为真 且 右为真 则结果为真
System.out.println(a == 2 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 1); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假
3.逻辑非 !
System.out.println(!(a == 2)); // a == 2 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
3.位运算符
1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
System.out.println(a & b);
2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
System.out.println(a | b);
3. 按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
int d = 0xf;
System.out.printf("%x\n", ~d);
4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
System.out.printf("%x\n", a ^ b);
4.条件运算符
条件运算符只有一个 :表达式 1 ? 表达式 2 : 表达式 3当 表达式 1 的值为 true 时 , 整个表达式的值为 表达式 2 的值 ;当 表达式 1 的值为 false 时 , 整个表达式的值为 表达式 3 的值 .也是 Java 中唯一的一个 三目运算符 , 是条件判断语句的简化写法
// 求两个整数的最大值
int x = 10;
int l = 20;
int max = x > l ? x : l;
完整代码2:
public class Test2 {
public static void main(String[] args) {
int a = 2;
int b = 1;
System.out.println(a + b); // 3
System.out.println(a - b); // 1
System.out.println(a * b); // 2
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出4
a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出1
a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6
a /= 3; // 相当于 a = a / 3
System.out.println(a); // 输出1
a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出1
int t = 1;
t++; // 后置++ 表示给t的值加1,此时t的值为2
System.out.println(t++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(t); // 输出3
++t; // 前置++ 表示给t的值加1
System.out.println(++t); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(t); // 输出5
int n = 1;
int m = 2;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(n == m); // false
System.out.println(n != m); // true
System.out.println(n < m); // true
System.out.println(n > m); // false
System.out.println(n <= m); // true
System.out.println(n >= m); //false
System.out.println(a == 2 && b == 1); // 左为真 且 右为真 则结果为真
System.out.println(a == 2 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 1); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
System.out.println(a == 2 || b == 1); // 左为真 且 右为真 则结果为真
System.out.println(a == 2 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 1); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假
System.out.println(!(a == 2)); // a == 2 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
System.out.println(a & b);
System.out.println(a | b);
int d = 0xf;
System.out.printf("%x\n", ~d);
System.out.printf("%x\n", a ^ b);
// 求两个整数的最大值
int x = 10;
int l = 20;
int max = x > l ? x : l;
}
}