文章目录
1、类型转换
在[Java-SE复习笔记系列-01]基本常识最后小节谈到了JAVA的整数和浮点数的设定,在赋值过程中存在自动类型转换,在计算式要保证参与的计算数据类型要一致,当不一致时会发生类型转换,转换主要分为强制类型转换和自动类型转换。
2.1 自动转换
自动转换指的是把取值范围小的类型自动提升为取值范围大的类型(理解为小瓶子的水倒进大瓶子里),下面举几个例子:
public static void main(String[] args){
int i = 2;
byte b = 3;
int j = b + i;
System.out.println(j);
}
分析这段代码,i是int型,b是byte型,i+b进行了求和运算,计算要求数据类型一致,所以会自动把byte类型(1个字节)的b提升为int类型(4个字节),计算后的数字为int类型,然后赋值给j。
同理,当一个int类型和一个double类型进行运算时,会把int类型提升为double然后进行计算,举例如下:
public static void main(String[] args){
int i = 1;
double d = 2.5;
double e = d + i;
System.out.println(e);
}
转换规则为:范围小的类型会自动向范围大的类型提升,byte、short、char运算时提升为int。
byte、short、char--->int--->long--->float--->double
2.2 强制转换
强制转换就是要手动进行转换,编译器不会自动进行转换,比如把1.5赋值给int类型会报错,因为1.5是double类型,根据上面的自动转换规则,不会自动转换为int类型。
强制类型转换也可以理解为大瓶子(取值范围大的类型)里的水(数据值)要倒进小瓶子(取值范围小的类型)里,当大瓶子的水体积大于小瓶子的容量时,会导致数据溢出;当大瓶子里的水体积小于小瓶子的容量时,数据值不变,只是类型变了。格式如下:
//数据类型 变量名 = (数据类型) 被转数据值;
public static void main(String[] args) {
int i = (int) 20.3; //20.3为double类型,内存中占8个字节,赋值后i的值为20
int j = (int) 40.0; //复制后j的值为40
short s = 1; //short类型变量在内存中占2个字节
/*
出现编译失败
s和1做运算的时候,1是int类型,s会被提升为int类型
s+1后的结果是int类型,将结果在赋值会short类型时因为不满足自动转换规则而发生错误
short内存2个字节,int类型4个字节
必须将int强制转成short才能完成赋值
*/
s = s + 1;//编译失败
s = (short)(s+1);//编译成功
}
一般做强制类型转换要极其注意转换后数据精度是否会损失的问题,比例当把浮点数强制转换为整数时,会直接丢失小数部分。int类型转换为short会砍掉2个字节。
// 定义s为short范围内最大值
short s = 32767;
// 运算后,强制转换,砍掉2个字节后不会出现预计的结果
s = (short)(s + 10); //赋值后s值为-32759,不是逻辑中想要的32777
2、 ASCII码表以及int和char的运行原理
因为计算机只认识二进制的0、1数据,为了能够处理人类认识的文字问题,产生了编码表。所谓编码就是把人类能看的懂的转换成计算机看得懂的,解码就是反过来。编码表就是这个对照表,比如要表示一个字母a,就用十进制数字97表示,通过ASCII编码表查到97对应字母a。
ASCII码表的全部内容百度即可查询,这里我们只需要记住三个最关键的数字:65(’A‘)、97(’a‘)、48(’0‘)即可,比如我们想知道字符D,只需要想起来字符A是65,然后加3就知道字符D对应68。
int i = 3; //赋值后i数据值为3
char c = 'a'; //赋值后c对应字符为’a‘
char c1 = (char)(c + i); //赋值加转换后c1对应字符为’d‘
在char和int计算过程中,根据自动转换规则,计算结果为int类型,所以计算之前要把char转换为int类型,char首先通过ASCII码表查询字符’a’对应着数字97,于是c+i实际是97+3,计算得到100为int类型,再通过强制类型转为char类型,c1就对应着’d‘。
3、++和- -计算方式
只需要记住一句话,++在前则先加后用,++在后则先用后加,- -同理。下面通过几个例子来说明:
//demo01
public static void main(String[] args) {
int a = 1;
int b = ++a; //先加后用,a先变成2,然后2赋值给b
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
//demo02
public static void main(String[] args) {
int a = 1;
int b = a++; //先用后加,a先赋值给b,然后a加1
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
4、符号+在字符串中的作用
在数字计算中的+就是我们日常生活中的加法,对于字符串,则是拼接的作用:
//demo01
public static void main(String[] args){
//字符串加int类型,首先把int类型转为字符串,然后拼接
//输出:5+5=55
System.out.println("5+5="+5+5);
}
//demo02
public static void main(String[] args){
//有括号先算括号
//输出:5+5=10
System.out.println("5+5="+(5+5));
}
5、比较运算符和逻辑运算符
比较运算符 | 说明 |
---|---|
== | 等于符号,比较符号两边数据是否相等,相等结果是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
}
逻辑运算符 | 说明 |
---|---|
&& | 两边都是true,结果才是true;短路特点:符号左边是false,右边不再运算 |
|| | 至少一边为true,结果就为true;短路特点: 符号左边是true,右边不再运算 |
! | ! true结果为false;!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
}
6、三元运算符
//基本格式:数据类型 变量名 = 布尔类型表达式?结果1:结果2
public static void main(String[] args) {
int i = (1==2 ? 100 : 200); //1==2为false,则取结果2赋值给i,i数据值为200
System.out.println(i);//200
int j = (3<=4 ? 500 : 600); //3<=4为true,则取结果1赋值给j,j数据值为500
System.out.println(j);//500
}
7、方法
JAVA的方法就是函数,方法必须定义在一类中方法外,方法不能定义在另一个方法的里面,定义格式为:
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
8、总结
数据类型转换分为自动转换和强制转换,占用字节数少的转成多的可以自动转换,反过来就得强制转换。ASCII码表就是一种字节到字符的编码表,int类型和char类型互转就是基于ASCII码表。自增和自减运算符记住一个原则就行,就是在前面就先算后用,在后面就先用后算。三元运算符适合代码逻辑较短的场景,省的写长长的if语句。
(本章内容为自学笔记,转载请注明来源,有错误地方欢迎评论区指出。)