1. 类型转换
自动提升,手动下降
1.1 自动类型转换
自动类型转换 (自动类型提升)
1.两种类型要兼容 比如 数值与数值之间相互兼容
2.目标类型(等号左边)大于源类型(等号右边
1.2 强制类型转换
强制类型转换 手动下降
1.两种类型要兼容
2.目标类型(等号左边)小于源类型(等号右边)
public class Test2{
public static void main(String [] args){
// 强制类型转换 手动下降
// 1.两种类型要兼容
// 2.目标类型(等号左边)小于源类型(等号右边)
short s1 = 120;
byte b1 = (byte)s1;
System.out.println(b1);
int i1 = 2300;
short s2 = (short)i1;
System.out.println(s2);
long l1 = 2356;
int i2 = (int)l1;
System.out.println(i2);
float f1 = 32.5F;
long l2 = (long)f1;
System.out.println(l2);
double d1 = 20.5;
float f2 = (float)d1;
System.out.println(f2);
}
}
1.3 特殊情况
强制类型转换
将一个过大的整数存放在较小的范围以内
public class Test1{
public static void main(String [] args){
// 强制类型转换
// 将一个过大的整数存放在较小的范围以内
// 情况1 长度不够 数据截断
short s1 = 257;
byte b1 = (byte)s1;
System.out.println(b1);
// 情况2 符号位发生变化
short s2 = 128;
byte b2 = (byte)s2;
System.out.println(b2);
// 原码 正数的原码反码都一样 都相同 是其本身 0100 0100 0100
// 负数 1011 原码
// 反码 1100 反码 符号位保持不变 其余各位取反
// 补码 1101 补码
// 变为了负数
short s3 = 129;
byte b3 = (byte)s3;
System.out.println(b3);
}
}
// 这里ctrl + 回车 跳出代码编辑框
进行算数运算时:
多个类型不同的操作数将自动提升 为最大的数据类型
两个操作数有一个为double,计算结果提升为double。
如果操作数中没有double,有一个为float,计算结果提升为float。
如果操作数中没有float,有一个为long,计算结果提升为long。
如果操作数中没有long,有一个为int,计算结果提升为int。
如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。
特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。
public class Test1{
public static void main(String [] args){
// 将char类型转换为int类型
char ch1 = 65;
int i1 = ch1;
System.out.println(i1);
char ch2 = 'B';
// 67 C B1
System.out.println(ch2 + '1' + "hello");
}
}
2. 运算符
2.1 算数运算符
public class Test1{
public static void main(String [] args){
int a = 10;
int b = 20;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
int c = 10;
int d = 3;
System.out.println(c % d);
}
}
2.2 一元运算符
++ 或者 -- 单独作为一条语句书写 在前 在后没有任何区别
++ 或者 -- 不是单独作为一条语句书写 有区别
如果++或者--在前 那么先执行++或者-- 再执行其他的语句
如果++或者--在后 那么先执行其他的 再执行++或者--
public class Test1{
public static void main(String [] args){
// ++ 表示自增1
// -- 表示自减1
int a = 10;
a++; // 等价于 a = a + 1;
System.out.println(a);
int b = 5;
b--; // 等价于 b = b - 1;
System.out.println(b);
int c = 10;
++c;
System.out.println(c);
int d = 5;
--d;
System.out.println(d);
// ++ 或者 -- 单独作为一条语句书写 在前 在后没有任何区别
// ++ 或者 -- 不是单独作为一条语句书写 有区别
// 如果++或者--在前 那么先执行++或者-- 再执行其他的语句
// 如果++或者--在后 那么先执行其他的 再执行++或者--
int e = 10;
int f = e++;
System.out.println("++在后,e的值是: " + e);
System.out.println("++在后,f的值是: " + f);
int h = 10;
int k = ++h;
System.out.println(h);
System.out.println(k);
}
}
2.3 赋值运算符
public class Test2{
public static void main(String [] args){
// 赋值运算符
// += -= *= /= %=
int a = 10;
a += 20; // a = a + 20;
System.out.println(a);
int b = 5;
b -= 2; // b = b - 2;
System.out.println(b);
int c = 2;
c *= 5; //c = c * 5;
System.out.println(c);
int d = 20;
d /= 4; // d = d / 4;
System.out.println(d);
int e = 100;
e %= 3; // e = 100 % 3;
System.out.println(e);
}
}
2.4 关系运算符
public class Test1{
public static void main(String [] args){
// 关系运算符 最终的结果都为布尔类型
int a = 10;
int b = 20;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
System.out.println(a == b);
System.out.println(a != b);
}
}
2.5 逻辑运算符
殊情况
&& 短路与 要求两个或者多个表达式同时都成立 结果为true 真 短路与是有短路效果的 如果第一个表达式不成立 则后续的表达式不再执行
|| 短路或 要求两个或者多个表达式有一个成立 则结果为真 true 短路或是有短路效果的 如果第一个表达式已经成立 则后续的不再执行
& 与 要求两个或者多个表达式同时都成立 结果为true 真,没有短路效果
| 或 要求两个或者多个表达式有一个成立 则结果为真 true ,没有短路效
public class Test1{
public static void main(String [] args){
// && 短路与 要求两个或者多个表达式同时都成立 结果为true 真
// 短路与是有短路效果的 如果第一个表达式不成立 则后续的表达式不再执行
// || 短路或 要求两个或者多个表达式有一个成立 则结果为真 true
// 短路或是有短路效果的 如果第一个表达式已经成立 则后续的不再执行
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) && (b < c)); // false
System.out.println((a < b) && (b < c)); // true
System.out.println((a > b) || (b < c)); // true
System.out.println((a < b) || (b < c)); // true
System.out.println("==============================================");
// & 与 要求两个或者多个表达式同时都成立 结果为true 真
// 没有短路效果
System.out.println((a > b) & (b < c)); // false
System.out.println((a < b) & (b < c)); // true
// | 或 要求两个或者多个表达式有一个成立 则结果为真 true
// 没有短路效果
System.out.println((a > b) | (b < c)); // true
System.out.println((a < b) | (b < c)); // true
}
}
public class Test2{
public static void main(String [] args){
int x=8;
int y=9;
System.out.println((++x==y)&&(++x!=y)); // true
System.out.println(x); // 10
int a=8;
int b=9;
System.out.println((a++==b) && (++a!=b)); // false
System.out.println(a); // 9
int c=8;
int d=9;
System.out.println((c++==d) & (++c!=d)); // false
System.out.println(c);
}
}
public class Test3{
public static void main(String [] args){
int x=8;
int y=9;
System.out.println((++x==y)||(++x!=y)); // true
System.out.println(x); // 9
int a=8;
int b=9;
System.out.println((++a==b) || (++a!=b)); // true
System.out.println(a); // 9
int c=8;
int d=9;
System.out.println((++c==d) | (++c!=d)); // true
System.out.println(c); // 10
}
}
public class Test4{
public static void main(String [] args){
// ! 取反
System.out.println(!true);
System.out.println(!false);
}
}
2.6 三元运算符
public class Test1{
public static void main(String [] args){
// 三元(三目)运算符
int age = 19;
System.out.println(age >= 18 ? "成年了" : "未成年");
int a = 10;
int b = a >= 10 ? 55 : 66;
System.out.println(b);
}
}
3. Scanner接收用户输入
程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。
需要使用java.util.Scanner 类来实现接收用户输入的内容,使用此类,必须导包。
如果输入了不匹配的数据,则会出现异常:java.util.InputMismatchException
此类提供以下功能来接收不同的数据:
next() 用于接收字符串
nextInt() 用于接收int类型的整数
nextDouble()用于接收double类型的小数
// 导包 必须写在 类声明之前
import java.util.Scanner; // 导包 将位于java.util包中Scanner类 引入到当前文件中 即可使用
public class Test1{
public static void main(String [] args){
// 使用java.util.Scanner 类来实现接收用户输入的内容
// 第二步 先创建一个Scanner类型的变量
Scanner input = new Scanner(System.in);
// 第一步 先提示用户输入内容
System.out.println("请输入您的名字");
// 第三步 接收用户输入的内容 并且存放到name变量中
String name = input.next();
// 第四步 将用户输入的名字打印出来
System.out.println("您输入的名字是:" + name);
System.out.println("请输入您的年龄");
int age = input.nextInt();
System.out.println("你输入的年龄是:" + age);
System.out.println("请输入您的考试成绩");
double score = input.nextDouble();
System.out.println("您输入的分数是:" + score);
System.out.println("请输入您的性别");
String sex = input.next();
System.out.println("您输入的性别是 :" + sex);
}
}