第五章 数据类型转换
数据类型转换
5.1自动转换(隐式)
当数据类型不一样时会发生数据类型转换、
1.自动类型转换(隐式)
(1)特点:代码不需要特殊处理
(2)规则:数据范围从小到大
2.强制类型转换(显式)
/*自动类型转换*/
public class Demo01DataType{
public static void main(String[] args){
System.out.println(1024);//这就是一个整数,默认是int类型
System.out.println(3.14);//这就是一个浮点数,默认就是double类型
//左边是long类型,右边是默认的int类型
//一个等号代表赋值,将右侧的int常量,交给左侧的long变量进行存储
//int-->long,符合了范围从小到大的要求
//这一行代码发生了自动类型转化
long num1 = 100;
System.out.println(num1);//100
//左边是double类型,右边是float类型,
//float-->double 符合了范围从小到大的要求,
//这一行代码发生了自动类型转化
double num2 = 2.5F;
System.out.println(num2);//2.5
//左边是float类型,右边是long类型,
//float-->long 符合了范围从小到大的要求
//这一行代码发生了自动类型转化
float num3 = 30L;
System.out.println(num3);//30.0
}
}
5.2 强制类型转换(显式)
5.2.1 注意事项
/*
强制类型转换
1.特点:代码需要特殊格式处理,不能自动完成
2.格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
注意事项:
1.强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
2.byte/short/char 这三种类型都可以发生数学运算,例如加法“+”
3.byte/short/char 这三种类型在运算的时候先提升为int类型,然后再计算
4.boolean 类型不能发生数据类型转换
*/
public class Demo02DataType{
public static void main (String[] args){
//左边是int类型,右边是long类型
//long-->int,不是从小到大
//不能发生自动类型转换
//格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
int num = (int) 100L;
System.out.println(num);
//long转换为int,数据溢出
int num1 = (int) 6000000000L; //超过int取值范围
System.out.println(num1);//1705032704 实际数值
//double-->int . 强制类型转换
int num3 = (int) 3.5;
System.out.println(num3);//3 精度损失 小数位被舍弃
char zifu1 = 'A'; // 这是一个字符型变量,里面是大写字母A
System.out.println(zifu1 + 1); // 66 也就是大写字母A被当做65进行处理了
//计算机底层会用一个数字(二进制)代表字符A 就是65
byte num4 = 40;
byte num5 = 50;
//byte + byte = int + 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);//100
System.out.println(result2);
}
}
ASCII码表:American Standard Code for Information interchange 美国信息交换标准代码
0-- 48
a–97
A–65
Unicode码表:万国码,也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
5.3 算数运算符-四则与取模运算
运算符: 进行特定操作的符号 例如 +;
表达式:用运算符连接起来的式子叫做表达式。例如20+5;
四则运算:
+ - * /
取模:% 只有对于整数的除法,取模运算符才有余数的意义
注意事项:
1.一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
public class Demo04Operator{
public static void main(String[] args){
//两个常量进行相加
System.out.println(20 + 30);
//两个变量相加
int a = 10;
int b = 20;
System.out.println(a + b);
//乘法
System.out.println(a * 10);
s
//除法
int x = 10;
int y = 3;
int result1 = x / y;
System.out.println(result1);
//取模
int result2 = x % y;
System.out.println(result2);
//一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
// inty + double --> double + double = double
double result3 = x + 2.5;
System.out.println(result3);
}
}
5.3.1 加号的多种用法
四则运算当中的加号“+”常见的三种用法:
1.对于数值来说,那就是加法
2.对于字符char来说,计算之前char会被提升为int,然后再计算
3.对于字符串String(首字母大写,并不是关键字)来说,加号代表字符串连接操作。
任何数据类型和字符串进行连接的时候,结果都会变成字符串。
public class Demo05Plus{
public static void main(String[] args){
//字符串类型的变量基本使用;
// 数据类型 变量名称 = 数据值;
String str1 = "Hello";
System.out.println(str1);//Hello
System.out.println(str1 + "world");
String str2 ="java";
//String + int --> String + String -->String
System.out.println(str2 + 20);//java20
//优先级问题
System.out.println(str2 + 20 + 30 );//java2030
System.out.println(str2 + (20 + 30) );//java50
}
}
5.3.2 自增自减运算符
/*
自增运算符:++
自减运算符:--
基本含义:让一个变量加一或者减一
使用格式:写在变量名称之前,或者写在变量名称之后。例如num++ 或者++num
使用方式:
1.单独使用:不和其他任何操作混合
2.混合使用;和其他操作混合,例如与赋值混合,或者与打印混合
使用区别:
1.在单独使用时,,前++和后++没有任何区别,也就是:++num和num++是完全一样的
2.在混合使用的时候
如果是前++ 立刻加一,拿着加一后的结果进行运算
如果是后++ 用原来数值进行运算,然后加一
注意:只有变量才能使用自增自减运算符!
*/
public class Demo06Operator{
public static void main(String[] args){
int num1 = 10 ;
System.out.println(num1);
++num1;//单独使用,前++
System.out.println(num1);//11
num1++;//单独,后++
System.out.println(num1);// 12
System.out.println("================");
int num2 = 20;
//混合使用,前++ ,先加一再使用
System.out.println(++num2);// 21
//混合使用,后++。先使用再加一
System.out.println(num2++);// 21
System.out.println(num2);//22 使用完加一
System.out.println("================");
//和赋值混合使用;
//先用后减
int num3 = 40;
int result1 = num3--;
System.out.println(result1);//40
System.out.println(num3);//39
//先减后用
int num4 = 20;
int result2 = --num4;
System.out.println(result2);//19
System.out.println(num4);//19
System.out.println("================");
int x = 10;
int y = 20;
int result3 = ++x + y--;
System.out.println(result3);//31
System.out.println(x);//11
System.out.println(y);//19
}
}
5.3.3 赋值运算符
/*赋值运算符分为:
基本赋值运算符: 就是一个等号“=”,代表将右侧的数据交给左 侧的变量。
int a = 30;
复合赋值运算符:
+= a += 3 相当于 a = a + 3;
-= a -= 3 相当于 a = a - 3;
*= a *= 3 相当于 a = a * 3;
/= a /= 3 相当于 a = a / 3;
%= a %= 3 相当于 a = a % 3;
注意事项:1.只有变量才能使用赋值运算符,常量不饿能进行赋值
2.复合赋值运算符其中隐含了一个强制类型转换
*/
public class Demo07Operator{
public static void main(String[] args){
int a = 10;
//a = a + 5
//a = 10 + 5 a 原来是10,现在重新赋值得到15
a += 5;
System.out.println(a);//15
int b = 10;
//b = b % 3
//b = 10 % 3
b %= 3;
System.out.println(b);
byte num = 30;
// num = num + 5
// num = byte + int
// num = int + int
// num = int
// num = (byte) int 复合赋值运算符其中隐含了一个强制类型转换
num += 5;
System.out.println(num);//35
}
}
5.3.4 比较运算符
比较运算符包括:
== 等于
< 小于
> 大于
<= 小于等于
>= 大于等于
!= 不等于
注意事项:
- 比较运算符,是两个数据之间进行比较的运算,运算结果都是true 或者false。
- 如果进行多次判断,不能连着写,例如 1< x < 3 ,这样写是错误的。
public class Demo08Operator{
public static void main (String[] args){
System.out.println(10 > 5);//输出true
int num1 = 10;
int num2 = 25;
System.out.println(num1 > num2);//false
System.out.println(num1 >= 10);//true
}
}
5.3.4 逻辑运算符
/*
与 (并且)&& 全都是真 才是真 否则是假
或 (或者)|| 其中一个为真 就为真,都是假才是假
非 (取反)! 本来是真,变成假,本来是假变成真
与 ,或 具有短路效果:如果根据左边已经可以判得最终结果那么右边的代码将不再执行,从而节省一定的性能。
注意事项:
1.逻辑运算符只能用于布尔值
2.与、或需要左右各自有一个Boolean值,但是取 反只要有唯一的一个Boolean值即可。
3.与、或两种运算符,如果有多个条件,可以连续写。
两个条件:条件A && 条件B
多个条件:条件A && 条件B && 条件C
即: 1 < x < 3
写成 int x = 2 ;
1 < x && x < 3
*/
public class Demo09Operator{
public static void main(String[] args){
System.out.println(true && false);//false
System.out.println(3 < 4 && 10 > 5);//true
System.out.println("==================");
System.out.println(true || false);//true
System.out.println(true );//true
System.out.println(!true );//false
int a = 10;
// false && true
System.out.println(1 > 3 && ++a < 100 );//false
System.out.println(a);//10
int b = 20;
// true || false
System.out.println(3 < 4 || ++b < 100 );//true
System.out.println(b);//20
}
}
5.3.8 三元运算符
/*
一元运算符:只需要一个数据就能进行操作的运算符: 取反! 、 自增++、 自减--
二元运算符:需要两个数据就能进行操作的运算符 :加法、赋值
三元运算符:需要三个数据就能进行操作的运算符
格式:
数据类型 变量名称 = 条件判断 ? 表达式A :表达式B
流程:
首先判断条件是否成立:
如果成立为true,那么将表达式A的值赋值给左侧的变量。
如果不成立为false。那么将表达式B的值赋给左侧的变量:
二者选其一
*/
注意事项:
必须同时保证表达式A和表达式B都符合左侧数据类型的要求
public class Demo10Operator{
public static void main(String[] args){
int a = 10;
int b = 20;
int max = (a > b ? a : b);
System.out.println("最大值" + max);//20
//int result = 3 > 4? 2.5 : 4; //写法错误 表达式A 不符合 左侧数据类型
System.out.println(a > b ? a : b);//正确写法 20
//a > b ? a : b //错误写法
}
}