运算符和Scanner
运算符
1.类型转换
+是一个运算符, 我们应该能够看懂,做数据的加法。
boolean类型不能转换为其他的数据类型
默认转换: 范围小的数据类型直接转换成范围大的数据类型
转换规则byte,short,char—int—long—float—double
注意事项byte,short,char相互之间不转换,他们参与运算首先转换为int类型
格式: 范围大的数据类型 变量 = 范围小的数据类型值;
图解:
public class Demo09TypeCast {
public static void main(String[] args) {
//直接输出了运算的结果
System.out.println(3 + 4);
//定义两个int类型的变量
int a = 3;
int b = 4;
int c = a + b;
System.out.println(c);
//定义一个byte类型,定义一个int类型
byte bb = 2;
int cc = 5;
System.out.println(bb + cc);
//我能不能不直接输出,用一个变量接收呢?
//用变量接收,这个变量应该有类型
//byte dd = bb + cc;//可能损失精度
//byte,short,char类型在参与运算的时候会把自己提升为int类型
int dd = bb + cc;
System.out.println(dd);
}
}
强制转换: 表示范围大的数据类型强制转换成范围小的数据类型
范围小的数据类型 变量 =(范围小的数据类型) 范围大的数据类型值
;
不建议,有可能损失精度
代码演示
public class Demo10TypeCast {
public static void main(String[] args) {
int a = 3;
byte b = 4;
int c = a + b;
//byte d = a + b;//可能损失精度
byte d = (byte) (a + b);
}
}
2.赋值运算符
为变量赋值的运算符
扩展的赋值运算符:+=、-=、*=、/= 、%=
左边+=右边 相当于 左边=左边+(右边)。
注意:左边不能是常量
隐含了一个强制类型转换.
public class Demo05Operator {
public static void main(String[] args) {
// 把10赋值给int类型的变量a
int a = 10;
// += 把左边和右边的数据进行运算,最后赋值给左边,左边的只能是变量
a += 10;// 相当于a = a + 10
System.out.println("a:" + a);
System.out.println("----------------------");
short s = 10;
// s += 20; // 相当于 s = s + 20;
s = (short) (s + 20);
System.out.println("s:" + s);
}
}
3.比较运算符
又叫关系运算符,即判断两个操作数的大小关系及是否相等的关系,比较运算符的返回一定为布尔值。
注意事项
关系运算符“==”不能误写成“=” 。
public class Demo06Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
System.out.println(a == b);
System.out.println(a == c);
System.out.println("-----------------");
System.out.println(a != b);
System.out.println(a != c);
System.out.println("-----------------");
System.out.println(a > b);
System.out.println(a > c);
System.out.println("-----------------");
System.out.println(a >= b);
System.out.println(a >= c);
System.out.println("-----------------");
int x = 3;
int y = 4;
// System.out.println(x == y);
// System.out.println(x = y);// 把y赋值给x,把x的值输出
boolean bb = (x == y);
// boolean cc = (x = y);// 报错
int cc = (x = y);//正确
}
}
4.逻辑运算符
逻辑运算符只能操作布尔值(这个布尔值可以使字面值也可以是布尔表达式),结果同样是一个布尔值。
基本使用: &(与),|(或),^(异或),!(非)
与:& 有false则false
或:| 有true则true
异或:^ 相同则false,不同则true
非:! true则false,false则true
public class Demo07Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) & (a > c));// false & false
System.out.println((a < b) & (a > c)); // true & false
System.out.println((a > b) & (a < c)); // false & true
System.out.println((a < b) & (a < c)); // true & true
System.out.println("---------------");
System.out.println((a > b) | (a > c));// false | false
System.out.println((a < b) | (a > c)); // true | false
System.out.println((a > b) | (a < c)); // false | true
System.out.println((a < b) | (a < c)); // true | true
System.out.println("---------------");
System.out.println((a > b) ^ (a > c));// false ^ false
System.out.println((a < b) ^ (a > c)); // true ^ false
System.out.println((a > b) ^ (a < c)); // false ^ true
System.out.println((a < b) ^ (a < c)); // true ^ true
System.out.println("---------------");
System.out.println((a > b)); // false
System.out.println(!(a > b)); // !false
System.out.println(!!(a > b)); // !!false
}
}
&&和&的区别
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
public class Demo08Operator {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 30;
System.out.println((a > b) && (a > c));// false && false
System.out.println((a < b) && (a > c)); // true && false
System.out.println((a > b) && (a < c)); // false && true
System.out.println((a < b) && (a < c)); // true && true
System.out.println("---------------");
System.out.println((a > b) || (a > c));// false || false
System.out.println((a < b) || (a > c)); // true || false
System.out.println((a > b) || (a < c)); // false || true
System.out.println((a < b) || (a < c)); // true || true
System.out.println("---------------");
int x = 3;
int y = 4;
// System.out.println((x++ > 4) & (y++ > 5)); // false & false
System.out.println((x++ > 4) && (y++ > 5)); // false && false
System.out.println("x:" + x);
System.out.println("y:" + y);
}
}
注意: 另外在Java中不可以写成3<x<6,应该写成x>3 && x<6 。
当短路的优点:只要能判断出结果则后边的部分就不再判断,日常开发中全部使用短路。
5.三元运算符
三元运算符即三个操作数参与计算的运算符。
格式:
(条件表达式)?结果1:结果 2;
运算规则:
判断条件表达式
true,运算结果为表达式1
false,运算结果为表达式2
如:
int i = 10;
int j = 20;
System.out.println(i>j?"i的值大":"j的值大");
//打印结果为j的值大
6.运算符优先级
6.1优先级概念
运算符运算的先后顺序,优先级越高(数字越小),计算顺序越靠前。
比如,当赋值运算符=与+运算符都作用在一个变量上时,先计算加法,再计算赋值。
如:
int i,j;
i = 10;
//对i这个变量有两个运算符操作,分别为=与+。
j = i + 20;
System.out.println(j);
//最终打印结果为30。说明先计算+后计算=。
6.2优先级规则
优先级相同的情况下,按照从左到右的顺序依次运算
引用数据 类型
1.引用数据类型使用步骤(重点是记住步骤):
导包:
使用import导包,在类的所有代码之前导包(找到要使用的类型)
定义变量,并创建对象赋值:
数据类型 变量名 = new 数据类型();
调用方法,每种引用数据类型都有其功能,我们可以调用该类型实例的功能:
变量名.方法名();
2.键盘录入:Scanner类(也可以叫做Scanner类型)
Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,终于不需要我们帮用户指定购物数量了,用户可以自己从键盘录入想买的数量了。
Scanner使用步骤:
导包:import java.util.Scanner;
创建对象实例:Scanner sc = new Scanner(System.in);
调用方法:
nextInt():接收一个整数
如:
int i = sc.nextInt(); 用来接收控制台录入的数字