1 数据类型
1.1 基本数据类型
四类八种
整型:
类型 | 所占内存 | 表数范围 |
---|---|---|
byte 字节型 | 1个字节 1B = 8b | [-128,127] |
short 短整型 | 2个字节 -2^15 ~ 2^15-1 | (-32768~32767) |
int 整形 | 4个字节 -2^31 ~ 2^31-1 | (-2147483648~2147483647) 约21亿 |
long 长整型 | 8个字节 -2^63 ~ 2^63-1 | 非常大 |
浮点型:
类型 | 所占内存 | 表数范围 | 精度 |
---|---|---|---|
float 单精度 | 4字节 | -3.403E38~3.403E38 | 6-7位 |
double 双精度 | 8字节 | -1.798E308~1.798E308 | 15-16位 |
字符型:
类型 | 所占内存 | 赋值 |
---|---|---|
字符型 char | 2个字节 |
布尔型:
类型 | 所占内存 | 赋值 |
---|---|---|
布尔型 boolean | 1个字节 | true、false |
1.2 引用数据类型
- 类 : class
- 数组 : []
- 接口 : interface
1.3 数据类型转换
-
对应类型的数据赋值给对应类型的变量
-
自动类型提升:
小 ===>大:可以正常存放,但是可能会造成内存的浪费。byte – >short --> int —> long --> float —> double
-
强制类型转换
大===>小:不能发生,有可能会造成损失精度。
小范围类型 变量名 = (小范围类型)大范围类型数据; -
注意:
如果存储多种类型的数据参与运算,结果类型为参与运算的最大类型
如果结果类型为<int类型,最终会自动提升 为int类型
如果为byte,short,char赋值时候,把int类型的常量,只要范围 允许可以成功赋值
boolean不参与类型转换
2 数据类型使用
2.1 基本数据类型
int i =1;
2.2 引用数据类型使用
- 导包 : 指明要使用类型的位置
import 包名.类名;
定义在类的上面 - 引用数据类型 引用|变量名 = new 引用数据类型();
- 使用功能
引用.公共名字();
2.2.1 Scanner的使用
-
导包:
import java.util.Scanner;
-
创建Scanner类型的引用
Scanner sc = new Scanner(System.in);
-
使用功能
引用.nextInt() ===>接收用户键盘输入int类型的内容
引用.nextByte()
引用.nextShort()
引用.nextLong()
引用.nextDouble()
引用.nextFloat()
注:
引用.next() 接收用户键盘输入String类型的内容从有效字符开始接收,遇到 空格等不接受,遇到enter建结束功能。
引用.nextLine() 接收用户键盘输入一整行的String类型的内容遇到enter建结束功能。
不要定义与jdk中类型同名,同包的类, 如果在 nextLine上面存在系列的next功能,需要处理遗留enter问题。
public static void main(String[] args){
//1.导入
//2.创建 Scanner类型的引用
Scanner sc = new Scanner(System.in);
//3.使用功能
System.out.println("请输入年龄 : ");
int age = sc.nextInt();
System.out.println(age);
System.out.println("请输入薪资 : ");
double sal = sc.nextDouble();
System.out.println(sal);
System.out.println("请输入用户名 : ");
String name = sc.next();
System.out.println(name);
//处理遗留enter问题
sc.nextLine();
System.out.println("请输入用求偶标准 : ");
String msg = sc.nextLine();
System.out.println(msg);
}
遇到enter键结束功能,求偶标椎没有输入,直接结束了。
2.2.2 Random的使用
- import java.util.Random
- Random ran = new Random();
- ran.nextInt() 随机产生int范围内的整数
ran.nextInt(整数n) 随机[0,n)整数
ran.nextDouble() [0.0,1.0) 随机产生double范围的小数
总结:
随机整数:
[0,n) ran.nextInt(整数n)
[0,n] ran.nextInt(n+1)
[min,max) ran.nextInt(max-min)+min
ran.nextInt(max)->[0,max)
ran.nextInt(max)+min->[min,max+min)
ran.nextInt(max-min)+min->[0,max-min)+min -->[min,max)
[min,max] ran.nextInt(max-min+1)+min
3 运算符
3.1 概念普及
- 操作数 : 运算符左右两边的数据
- 表达式 : 运算符连接操作数整体称为表达式
- 语句 : 语句以;结束
- 一元运算符|单目运算符 : 操作数只有一个 + -(正负号) ++ –
- 二元运算符|双目运算符 : 操作数有两个 + - * /
- 三元运算符|三目运算符 : 操作数有三个 条件运算符
3.2 运算符分类
- 赋值运算符 =
- 算数运算符 + - * / % ++ –
- 关系运算符 > < >= <= == != instanceof
- 逻辑运算符 & | ! ^ && ||
- 扩展运算符 算数+赋值 位+赋值
- 条件运算符 ?:
- 位运算符
3.2.1 赋值运算符
- 基础赋值运算符 =
// 赋值运算符是整个java中唯一的自右向左进行运算的,优先级最低
int num = 10;
- 扩展赋值运算符(算数运算符+基础赋值运算符 )
+=,-=,*=,/=,%=
优点:
执行效率快
自动做强制类型转换
注意: 编译期间编译器会自动把可以实现的位置优化成为扩展赋值运算符
3.2.2 算数运算符 + - * / % ++ –
- +:
(1)正号 (省略)
(2)加法运算
(3)字符串的连接符
当+左右两边一旦出现""字符串,+就做为字符串连接符,把左右两边的数据拼接成为一个字符串
System.out.println("hello"+'a'+1); //"helloa"+1="helloa1"
System.out.println('a'+1+"hello"); //98+"hello" = "98hello"
-
- :
(1)负号
(2)减法运算 -
% 取余数 | 取余|模以
当第一个操作数<第二个操作数,结果为第一个操作数 -
++ - - 一元运算符 a++ ++a a-- --a
++ 自增 : 自身+1 , a++相当于a=a+1
- - 自减 : 自身 - 1 , a- - 相当于 a=a-1规律 :
只操作自己 :
++放在操作数的前面后面都是自身+1
--放在操作数的前面后面都是自身-1
影响其他结果 : (赋值,表达式,输出)
++ --放在操作数前面,先+1|-1,再去运算
++ - -放在操作数后面,先去运算,再进行+1|-1
3.2.3 比较运算符|关系运算符 > < >= <= == != instanceof
- > < >= <= 基本数据类型中 除了 boolean之外的其他数据类型 不能比较引用类型
- != == 既可以比较基本数据类型(包含boolean类型)也可以比较引用类型
System.out.println(true == true); //true
System.out.println("1" == "2");//false
- instanceof 只能用来比较引用类型 某个变量是否是某个具体类型
System.out.println("abc" instanceof String);//true
注:
关系运算符最后的结果是一个boolean类型的变量
3.2.4 逻辑运算符 & | ! ^ && ||
- 逻辑运算符左右两边的操作数只能是boolean值
- & | ^ 基本上碰到就是位运算符
- &和&& 两个操作数都为true结果为true 其他都为false
- |和|| 两个操作数有一个位true结果为true,两个都是false结果才是false
- ! true–>false false–>true
- ^ 相同为false 不同为true
- &和短路&&的区别: 运算结果一致,但是&&效率高因为左边的操作数- 如果为false 右边不参与运算
- |和短路||的区别:运算结果一致,但是||效率高因为左边的操作数如果为true 右边不参与运算
3.2.5 条件运算符
-
条件表达式 ? 值1 : 值2 ;
-
条件表达式 : 值为boolean类型的表达式
-
执行流程:
1.计算条件表达式,得到boolean结果
2.为true,结果为值1
为false,结果为值2
3.2.6 位运算符
- 位运算符(了解)
把操作数转为二进制,然后根据运算符的规则运算,最终得到的结果转为十进制
& : 同一位的两个数,两个都为1才是1,一个为0就是0
| : 同一位的两个数,一个为1就是1,两个都为0才是0
^ : 同一位的两个数,相同为0不同为1
-
注意 : 以上三个左右两边为boolean类型数据就作为逻辑运算符存在
-
位移运算符
>> 右移 8>>3==> 8 / 2 ^ 3(右移 :/2的次方)
把第一个操作数转为二进制,向右移动第二个操作数个位数,移出的位数直接忽略不计,剩余的转为十进制。
<< 左移 8<<3 ==> 8*2^3(*2的次方)
把第一个操作数转为二进制,向左移动第二个操作数个位数,空位补0,结果转为十进制。 -
注意 : 建议使用位移运算符代替乘除,效率高
3.2.7 运算符优先级
- 单目算数位关系,逻辑三目后赋值
运算符 | 描述 | 结合律 |
---|---|---|
. [] () | 字段访问、数组下标、函数调用以及表达式分组 | 从左到右 |
++ – - ~ ! delete new typeof void | 一元运算符、返回数据类型、对象创建、未定义值 | 从右到左 |
* / % | 乘法、除法、取模 | 从左到右 |
+ - + | 加法、减法、字符串连接 | 从左到右 |
<< >> >>> | 移位 | 从左到右 |
< <= > >= instanceof | 小于、小于等于、大于、大于等于、instanceof | 从左到右 |
== != === !== | 等于、不等于、严格相等、非严格相等 | 从左到右 |
& | 按位与 | 从左到右 |
^ | 按位异或 | 从左到右 |
| | 按位或 | 从左到右 |
&& | 逻辑与 | 从左到右 |
|| | 逻辑或 | 从左到右 |
?: | 条件 | 从右到左 |
= oP= | 赋值、运算赋值 | 从右到左 |
, | 多重求值 | 从左到右 |