[上一篇](https://blog.csdn.net/CHiN_951/article/details/134538976)
基本数据类型之间是可以相互转换的,这种转换可分为如下两种
自动类型转换
小范围的类型可以自动转换为大范围类型
强制类型转换
大范围类型若想转换为小范围类型需要强制类型转换
在java中有个符号叫等号,等号的作用是赋值(区别与数学中)
要求等号的左右两侧的类型要保持一致,若不一致就需要类型转换
等号的运算顺序是从右向左的
java是强类型语言,要求等号左右类型必须保持一致
byte short int long float doule 按照此顺序进行自动类型转换
boolean类型不参与转换
char特殊情况,使用较少
从前向后就是自动类型转换
自动类型转换又称隐式类型转换,无需做任何处理
// 自动类型转换
public static void main(String[] args) {
// =从右向左的
int a = 10;//定义变量
// double = int 将int类型赋值给double类型
double d = a;
// float = double 将double赋值给float
// float f = d;
}
在数据类型兼容的情况下,大转小就是强制类型转换
又称为显示类型转换
顺序和自动类型转换相反
强制类型转换会丢失精度
语法
目标类型 = (目标类型) 源类型;
public static void main(String[] args) {
double d = 10.022222222222222222222222;
// float = double
float f = (float) d;
System.out.println(f);
}
char类型的取值是0~65535的
char的范围是在int取值范围之内的,char向int转换是自动类型,int向char是强制类型
char可以理解为是完全正向的short类型,因为两者的范围是一样的都是65536个数
public static void main(String[] args) {
char c = '你';
// byte = char 强制类型转换
byte b = (byte) c;
// byte = char 强制类型转换
short s = (short)c;
b = 10;
// char = byte 强制类型转换
c = (char)b;
// char = short 强制类型转换
c = (char)s;
}
超出范围的强制类型转换,需要进行二进制操作的
public static void main(String[] args) {
// -128下一位(-129)就是127
int i = -129;
byte b = (byte) i;
System.out.println(b);
// 127下一位(128)是-128
i = 128;
b = (byte) i;
System.out.println(b);
}
+
1.数值相加 在java中做计算时最小的返回结果为int,最大结果为double
char本身可以当做数值型类处理
2.正数
3.字符串拼接 拼接的顺序是从左向右的,所有和字符串拼接的结果都是字符串
public static void main(String[] args) {
// 1.加法计算
int a = 10;
int b = 20;
System.out.println(a + b);
char c = 'a';
// char+int结果为int类型
System.out.println(c + 1);
byte bb = 10;
short ss = 20;
char cc = 'h';
// 相加的结果可以使用哪些类型接收:int long float double
// int result = bb + ss + cc;
// long result = bb + ss + cc;
// float result = bb + ss + cc;
double result = bb + ss + cc;
// 2.正数
System.out.println(+10);
// 3.字符串拼接 ""空串:没有任何内容的字符串
System.out.println(2+""+3);//23
System.out.println(""+2+3);//23
System.out.println(2+3+"");//5
// 小括号先计算
System.out.println(""+(2+3));//5
}
-
1.数值相减 2.负数
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println(a - b);
byte bb = 10;
short ss = 10;
char cc = 10;
int result = bb + ss - cc;
}
*
乘法运算,注意乘法时最容器超出范围
public static void main(String[] args) {
System.out.println(10 * 10);
System.out.println(1000000000 * 1000000000);
}
/
java中所有的int/int的结果为int(取整)
除数为0时,会抛出异常ArithmeticException(数学异常),异常之下的代码不会执行了
除数为0.0时,结果为Infinity(无穷)
0/0.0时,结果为NaN(Not a Number,不是一个数,非数)
public static void main(String[] args) {
System.out.println(10 / 2);
System.out.println(10 / 3);//结果为3 取整
// ArithmeticException数学异常
// System.out.println(10 / 0);//除0 /by zero
// 异常之下的代码是无法执行的
System.out.println("嗨嗨嗨");
System.out.println(10 / 0.0);//Infinity
System.out.println(0 / 0.0);//NaN
}
%
模运算,取余运算符
public static void main(String[] args) {
System.out.println(5 % 3);//2
System.out.println(5 % -3);//2
System.out.println(-5 % 3);//-2
System.out.println(-5 % -3);//-2
}
++ –
i++ 和 ++i
语法上都是自增
i-- 和 --i
语法上都是自减
过程中有区别
i++ 先使用,再自增
++i 先自增,再使用
public static void main(String[] args) {
int i = 10;
i ++;
System.out.println(i);
int j = 10;
++ j;
System.out.println(j);
System.out.println("------------------------------");
int a = 2;
System.out.println(a ++);//2 ==> 3 在语句之内先使用对应的值
System.out.println(a);//3
System.out.println(++ a);//4 在语句之内后使用对应的值
}
赋值运算符的优先级最低
= 赋值 从右向左
+= sum+=i 等价与 sum = sum + i
-= sum-=i 等价与 sum = sum - i
*= 同上
/= 同上
%= 同上
public static void main(String[] args) {
int a = 10;
a += 10;//a = a + 10;
System.out.println(a);
a -= 5;
System.out.println(a);
a *= 2;
System.out.println(a);
a /= 10;
System.out.println(a);
a %= 3;
System.out.println(a);
System.out.println("-----------------------------");
// ++ 和 += 自带类型转换 但是 s = s + i不能类型转换
// byte/short自增可以使用++ 和 +=1 但 s=s+1不能使用
byte i = 10;
i ++;
System.out.println(i);
i += 1;
System.out.println(i);
/*i = i + 1;//1是int类型
System.out.println(i);*/
}
比较运算符
返回结果都为boolean
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
public static void main(String[] args) {
System.out.println(1 > 2);
System.out.println(1 < 2);
System.out.println(1 >= 2);
System.out.println(1 <= 2);
System.out.println(1 == 2);
System.out.println(1 != 2);
}
逻辑运算符由关系运算符组成,返回结果同样为boolean
&&/& 和
两个条件并列
同真为真,有假则假*
||/| 或
两天条件选一个
同假为假,有真则真*
! 是
是非转换
非真即假,非假即真*
public static void main(String[] args) {
System.out.println(true && true);
System.out.println(1 < 2 && 3 < 4);
System.out.println(true && false);
System.out.println(false && true);
System.out.println(false && false);
// && 和 &结果是一样的
System.out.println(true & true);
System.out.println(true & false);
System.out.println(false & true);
System.out.println(false & false);
System.out.println("---------------------------------------");
System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || true);
System.out.println(false || false);
System.out.println(true | true);
System.out.println(true | false);
System.out.println(false | true);
System.out.println(false | false);
System.out.println("---------------------------------------");
System.out.println(!true);
System.out.println(!false);
}
&& 和 & 的区别
&&短路语句,效率高
若条件1为false,条件2就不执行
&不短路
若条件1为false,条件2正常执行
|| 和 | 的区别
||短路语句,效率高
若条件1为true,条件2就不执行
|不短路
若条件1为true,条件2正常执行
public static void main(String[] args) {
int a = 10;
System.out.println(1 > 2 && a ++ > 10);//条件1为:false 条件2不执行了 a没有进行++
System.out.println(a);
int b = 10;
System.out.println(1 > 2 & b ++ > 10);//不短路
System.out.println(b);
int c = 10;
System.out.println(1 < 2 || c ++ > 10);
System.out.println(c);
int d = 10;
System.out.println(1 < 2 | d ++ > 10);
System.out.println(d);
}
三元运算/三目运算
boolean?结果1:结果2;
boolean为true时,得到结果1
boolean为false时,得到结果2
public static void main(String[] args) {
System.out.println("请输入java成绩:");
int score = 59;
System.out.println(score >= 60 ? "奖励自己一顿大餐" : "请大家吃雪糕");
}
使用java的控制台,接收用户输入的信息,和程序之间进行交互
步骤:
1.创建控制台扫描器Scanner
2.引入Scanner工具类
3.使用Scanner对控制台输入的内容进行扫描
扫描器(Scanner)在一个类中可以使用多次,只定义一次即可
常用的接收类型:int double String
// 2.引入Scanner
import java.util.Scanner;
public class Demo12 {
public static void main(String[] args) {
// 1.定义扫描器
Scanner input = new Scanner(System.in);//ctrl+shift+o
// 3.对输入的内容进行扫描
// 情况1:int类型
System.out.println("请输入一个int类型的值:");
int a = input.nextInt();
System.out.println("您输入的int类型为:"+a);
// 情况2:double类型
System.out.println("请输入一个double类型的值:");
double d = input.nextDouble();
System.out.println(d);
// 情况3:String类型
System.out.println("请输入一个String类型的值:");
String str = input.next();
System.out.println(str);
// 其他情况
System.out.println("请输入一个byte类型的值:");
byte b = input.nextByte();
System.out.println(b);
System.out.println("请输入一个boolean类型的值:");
boolean boo = input.nextBoolean();
System.out.println(boo);
// char需要特殊记忆,使用较少
System.out.println("请输入一个char类型的值:");
char c = input.next().charAt(0);
System.out.println(c);
}
}
可以通过流程控制语句改变代码的执行顺序
默认的顺序:从上向下,从左向右
分支结构:有选择的执行或者跳过某段代码
循环结构:重复执行某段代码
语法
if(boolean){
//代码段
}
当boolean类型为true时执行代码段;false时跳过
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入钟良的余额:");
double balance = input.nextDouble();
// 当boolean为true会执行代码段,为false时跳过
if(balance < 10) {
System.out.println("我没钱了,妈给我打点钱");
}
System.out.println("程序结束");
}
语法
if(boolean){
//代码段1
}else{
//代码段2
}
当boolean类型为true时执行代码段1;false时执行代码段2
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入钟良的余额:");
double balance = input.nextDouble();
// 实际开发中,尽量少的使用else语句
/*if(balance < 10) {
System.out.println("我没钱了,妈给我打点钱");
}else {
System.out.println("我要吃一顿大餐,9.9疯狂星期四");
}*/
// 更推荐写如下代码
if(balance < 10) {
System.out.println("我没钱了,妈给我打点钱");
}
if(balance >= 10) {
System.out.println("我要吃一顿大餐,9.9疯狂星期四");
}
System.out.println("程序结束");
}
语法
if(boolean){
//代码段1
}else if(boolean){
// 隐藏条件,不满足上面的条件,满足当前条件是执行
//代码段2
}else if(boolean){
//代码段3
}…else if(boolean){
//代码段n
}else {
// 不符合上面条件执行的代码块
}
执行条件为true的代码段,上面的判断会拦截下面的判断
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入钟良的余额:");
double balance = input.nextDouble();
if(balance >= 100) {
System.out.println("吃点好的,来份臭豆腐");
}/*else if(balance >= 60){
// 逻辑出了问题
System.out.println("嘿嘿嘿");
}*/else if(balance >= 90 /*隐藏条件&& balance < 100 可以不写*/) {
System.out.println("鸡架拌面");
}else if(balance >= 80) {
System.out.println("打卤面");
}else {
System.out.println("回家煮鸡蛋吃");
}
System.out.println("程序结束");
}
语法
if(条件1){
if(条件2){
同时满足条件1条件2
}else{
满足条件1但不满足条件2
}
}else{
不满足条件1,与条件2没有关系
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入百米的时间:");
double time = input.nextDouble();
if(time < 10) {
System.out.println("请输入性别:");
String gender = input.next();
// 字符串的判断使用equals方法 使用"男"和gender去比较
if("男".equals(gender)) {
System.out.println("进入男子组决赛");
}else {
System.out.println("进入女子组决赛");
}
} else {
System.out.println("哥们在接着练吧");
}
}
1.java中基本数据类型的比较使用 ==,字符串类型的比较使用str1.equals(str2) 若一致返回true,否则返回false
String str1 = "hello";
String str2 = "hello";
// 内容相同返回true,内容不一致返回false
System.out.println(str1.equals(str2));
2.当且仅当,if结构有一条语句时,{}可以省略
if(str1.equals(str2))
System.out.println("好");
3.多重if时,要注意逻辑错误,要将更严苛的条件写在前面
rintln("嘿嘿嘿");
}*/else if(balance >= 90 /*隐藏条件&& balance < 100 可以不写*/) {
System.out.println("鸡架拌面");
}else if(balance >= 80) {
System.out.println("打卤面");
}else {
System.out.println("回家煮鸡蛋吃");
}
System.out.println("程序结束");
}