什么是自动类型转换?为什么要学习自动类型转换?
类型范围小的变量,可以直接赋值给类型范围大的变量。
转换的规则:
各个符号所占字符数。
在表达式中,小范围的变量会自动变成较大范围的类型再运算
byte、char、short->int ->long ->float ->double
注意事项:
1、表达式的最终结果类型由表达式中的最高类型决定。
2、在表达式中,byte、short、char是直接转成Int类型参与运算的
栗子1:
栗子2:
1、定义:
可以强行将类型范围大的变量、数据赋值给类型范围小的变量
数据类型 变量 = (数据类型)变量、数据
2、强制类型转换有哪些需要注意的?
可能出现数据丢失。如栗子1
小数强制转换成整数是直接截断小数保留整数。
栗子1:
造成数据的截断,具体底层原理是byte数据的位数是8位,范围是-2^7~
2^7-1, 1500超过了这个范围,所以会造成数据丢失。
1、加减乘除取余
2、“+”做连接符 //能算则算不能算就拼接在一起
3、++ – 运算符
4、逻辑运算符
| & | 逻辑与 说明:必须都是true,结果才是true,只要有一个false,结果为false |
|---|---|
| 竖 | 逻辑或 说明:只要有一个为true,结果为true |
| ! | 逻辑非 说明:颠倒 |
| ^ | 逻辑异或 说明:相同为0,相异为1 |
| && | 短路与 说明:判断结果与“&”一样,过程是左边为false右边不执行 |
| 双竖线 | 短路或 说明:过程是左边为true,右边不执行 |
5、三元运算符 表达式?表达式1:表达式2
6、运算符优先级
7、键盘输入(导包操作)(后面有栗子)
就2问题举个栗子
public class txt {
public static void main(String[] args) {
//目标:+符号做连接符的识别
int a=5;
System.out.println("abc"+5);
System.out.println("abc"+a);
System.out.println(5+a);
System.out.println("abc"+5+'a');
System.out.println(a+'a');//5+97=102
System.out.println(a+""+'a');//'5'+'a'=5a
System.out.println(a+'a'+"itheima");//102itheima
System.out.println("itheima"+a+'a');//itheima5a
System.out.println("itheima"+(a+'a'));//itheima102
}
}
本着能算就算的原则。 单独的字符和int 类型可以运算,但是字符串就不能和整数运算,所以就必须拼接
就问题三举两个栗子
第一个:
public class txt {
public static void main(String[] args) {
int a = 1;
int b=a++;
System.out.println(b);
System.out.println(a);
}
}
注意,在表达式中,后++运算符是先赋值后自增的。它是先把a赋值给b,然后再完成自增1。
第二个:
Question
public class txt {
public static void main(String[] args) {
int k = 3;
int p = 5;
//k 4 5 4
//p 4 3 4
//rs 3 +5 -4 + 4 -5 + 4 + 2=9
//记住口诀,++在前 那么先自增1然后再赋值给左边,++在后,那么直接先赋值,然后自增1
int rs = k++ + ++k - --p + p-- -k-- + ++p +2;
System.out.println(k);
System.out.println(p);
System.out.println(rs);
}
}
与分析一样。奈斯
就问题5举个2栗子
第一个
public class txt {
public static void main(String[] args) {
double score = 98;
String rs = score>=60?"考试通过":"考试不及格";
//注意前后类型要一致。
System.out.println(rs);
}
}
注意前后类型要一致,而且String类型的首字母是大写的S
第二个:
三元运算符的嵌套
public class txt {
public static void main(String[] args) {
int i =5,j = 7,k= 1;
int max = i>j?i>k?i:k:j>k?j:k;
System.out.println(max);
}
}
哈哈,是不是有点懵逼
其实这样更好理解
public class txt {
public static void main(String[] args) {
int i =5,j = 7,k= 1;
int max = i>j?(i>k?i:k):(j>k?j:k);
System.out.println(max);
}
}
具体理解:先拿 i 跟 j 去作比较,如果 i 比较大,那么就执行(i>k?i:k),如果 i 比 k大 那么就返回 i的值,否则返回k的值。
如果 j 比较大,一样的去和k去作比较。懂了吧11!!
就第7个问题直接上栗子
import java.util.Scanner;
//1、导包操作
public class txt {
public static void main(String[] args) {
//2、得到一个键盘扫描对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄");
//3、调用sc对象的功能等待api接收用户输入的数据
//这个代码会等待用户输入数据,直到用户输入完数据并按下了回车
int age = sc.nextInt();
System.out.println("您的年龄是"+age);
}
}
看注释就能明白的事,记住3个操作就可以啦。



