一,数据类型转换
当数据的类型不一致时,将会发生数据类型转换
(1),自动类型转换(隐式)
特点:代码不需要进行特殊处理,自动完成。
规则:数据范围从小转换到大(byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double)
代码示例:

package cn.itcate.day2demo; public class Demo01DataType { public static void main(String[] args) { System.out.println(1024); //这是一个整数,默认是int类型 System.out.println(3.14);// 浮点数,默认是double类型 long num1 = 100; System.out.println(num1); //100 // 左边是int类型,右边是long类型,左右不一样 // int---->long,符合从小范围到大氛围的要求 // 这一行代码发生了自动类型转换 double num2 = 2.5F; System.out.println(num2);// 2.5 // 左边是double类型,右边是float类型,左右不一样 // float --> double,符合从小到大的规则 // 也发生了自动类型转换 float num3 = 30L; System.out.println(num3); // 30.0 // 左边是float类型,右边是long类型,左右不一样 // long --> float,范围是float更大一些,符合从小到大的规则 // 也发生了自动类型转换 } }
(2),强制转换(显式)
当我们将浮点数类型赋值到int类型,将会产生编译失败。
int i = 3.14; // 错误
double类型内存占8个字节,int类型内存占4个字节。3.14是double类型,取值氛围打于int类型。违反从小范围转换到大范围的原则。
强制类型转换 :能将 取值范围大的类型 强制转换成 取值范围小的类型 。
格式:数据类型 变量名 = (数据类型) 被转数据类型;
代码示例:

package cn.itcate.day2demo; public class Demo02DataType { public static void main(String[] args) { int num = (int) 100L; System.out.println(num); // 100 // 左边是int类型,右边是long类型,不一样 // long --> int,不是从小到大 // 不能发生自动类型转换! // 格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据; // long类型转换为int类型 int num2 = (int) 60000000L; System.out.println(num2); // 1705032704 // double --> int, 强制类型转换 int num3 = (int) 3.99; System.out.println(num3);// 3 char str = 'A'; System.out.println(str + 1);// 66 // 2. byte/short/char这三种类型都可以发生数学运算,例如加法“+”. // 3. byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。 byte num4 = 40; byte num5 = 50; // byte + byte --> int + int --> int int result1 = num4 + num5; System.out.println(result1); // 90 short num6 = 60; // byte + short --> int + int --> int // int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发生数据溢出 short result2 = (short) (num4 + num6); System.out.println(result2); // 100 } }
注意:
1. 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
2. byte/short/char这三种类型都可以发生数学运算,例如加法“+”.
3. byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
4. boolean类型不能发生数据类型转换
二,ASCII编码表
数字和字符的对照关系表(编码表)如图:
ASCII码表:American Standard Code for Information Interchange,美国信息交换标准代码。
Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
编码表太长了,我们可以记住具有代表性的几个:
代码示例:

package cn.itcate.day2demo; public class Demo03DataTyoeChar { public static void main(String[] args) { // 左侧是int类型,右边是char类型, // char --> int,确实是从小到大 // 发生了自动类型转换 char zifu1 = '0'; System.out.println(zifu1 + 0); // 48 char zifu2 = 'A'; System.out.println(zifu2 + 0);// 65 char zifu3 = 'a'; System.out.println(zifu3 + 0);// 97 //超出ASCII的范围,使用Unicode char zifu4 = ; System.out.println(zifu4 + 0);'中' } }
注意:在char类型和int类型计算的过程中,char类型的字符先查询编码表,char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
三,运算符
3.1 算法运算符
+ 加法运算,字符串连接运算
- 减法运算
* 乘法运算
/ 除法运算
% 取模运算,两个数字相除取余数
++、 -- 自增自减运算
运算符:进行特定操作的符号。例如:+、-
表达式:用运算符连起来的式子叫做表达式。例如:3 + 5。又例如:a + c
代码示例:

注意:
- 对于一个整数的表达式来说,除法用的是整除,整数除以整数,结果仍然是整数。只看商,不看余数。
- 只有对于整数的除法来说,取模运算符才有余数的意义。
- 一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
字符串的拼接(+)
1. 对于数值来说,那就是加法。
2. 对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。
char类型字符,和int类型数字,之间的对照关系表:ASCII、Unicode
3. 对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。
任何数据类型和字符串进行连接的时候,结果都会变成字符串

package cn.itcate.day2demo; public class Demo05Plus { public static void main(String[] args) { // 字符串类型的变量基本使用 // 数据类型 变量名称 = 数值值; String str1 = "Hello"; System.out.println(str1); // Hello System.out.println("Hello" + "Hello"); // HelloWorld String str2 = "Java"; // String + int --> String System.out.println(str2 + 20); // Java20 // 优先级问题 System.out.println(str2 + 20 + 30);// Java2030 System.out.println(str2 + (20 + 30));// Java50 } }
3.2 自增(++)和自减(--)
基本含义:让一个数字变量加1,或者让一个数字变量减1
使用格式:有前++和后++。例如:++num, num++
独立运算:
时前++和后++没有区别
混合运算:
和其他变量放在一起, 前 ++ 和 后 ++ 就产生了不同。
A. 如果是【前++】,那么变量【立刻马上+1】,然后拿着结果进行使用。 【先加后用】
B. 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量+1】。 【先用后加】
变量 前 ++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
代码如下:
public static void main(String[] args) { int a = 1; int b = ++a; System.out.println(a);//计算结果是2 System.out.println(b);//计算结果是2 }
变量 后 ++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
代码如下:
public static void main(String[] args) { int a = 1; int b = a++; System.out.println(a);//计算结果是2 System.out.println(b);//计算结果是1 }
代码如下:

package cn.itcate.day2demo; public class Demo06Operator { public static void main(String[] args) { int num1 = 10; // 前++ ++num1; System.out.println(num1); // 后++ num1++; System.out.println(num1); // 混合使用 int x = 10; int y = 20; int result1 = ++x + y--; System.out.println(result1);// 31 System.out.println(x); // 11 System.out.println(y); // 19 } }
注意:变量才能使用自增、自减运算符。常量不可发生改变。
赋值运算
= 等于
+= 加等于
-+ 减等于
*= 乘等于
/= 除等于
%= 取模等
代码如下:
public static void main(String[] args){ int i = 5; i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i System.out.println(i); //输出结果是10 }
比较运算符
== 比较符号两边数据是否相等,相等结果是true。
< 比较符号左边的数据是否小于右边的数据,如果小于结果是true。
> 比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<= 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。
>= 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。
! = 不等于符号 ,如果符号两边的数据不相等,结果是true
代码如下:
public static void main(String[] args) { System.out.println(1==1);//true System.out.println(1<2);//true System.out.println(3>4);//false System.out.println(3<=4);//true System.out.println(3>=4);//false System.out.println(3!=4);//true }
比较运算符
&& 短路与
1. 两边都是true,结果是true
2. 一边是false,结果是false
短路特点:符号左边是false,右边不再运算
|| 短路或
1. 两边都是false,结果是false
2. 一边是true,结果是true
短路特点: 符号左边是true,右边不再运算
! 取反
1. ! true 结果是false
2. ! false结果是true
public static void main(String[] args) { System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false,右边不计算 System.out.println(false || false);//falase System.out.println(false || true);//true System.out.println(true || false);//true,右边不计算 System.out.println(!false);//true }
三元运算符
格式: 数据类型 变量名 = 布尔类型表达式? 结果1:结果2
三元运算符计算方式:
布尔类型表达式结果是 true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是 false,三元运算符整体结果为结果2,赋值给变量。
代码示例:
public static void main(String[] args) { int i = (1==2 ? 100 : 200); System.out.println(i);//200 int j = (3<=4 ? 500 : 600); System.out.println(j);//500 }