02数据类型和运算符
一、数据类型
1.变量
1.变量:可以变化的量,在内存中,一个用于装数据的容器,数据可变,可以替换和覆盖(在内存里临时保存)。
下面展示变量声明方法
。
int a = 6;//把6赋值给a,把等号右边的值赋值给等号左边的值。
2.进制之间的转换:除K取余法
除k取余法,主要用于把十进制的数化为k进制的数。
例如:
把89化为二进制的数
89÷2=44 余1
44÷2=22 余0
22÷2=11 余0
11÷2=5 余1
5÷2=2 余1
2÷2=1 余0
1÷2=0 余1
然后把余数由下往上排序
1011001(2)
这样就把89化为二进制的数了
89(10)=1011001(2)
内存和硬盘通过二进制文件的形式存储数据。
计算机中最小的二进制位数是8位
1byte(字节)=8bit(8位二进制)
1KB=1024byte
1MB=1024KB
1GB=1024MB
1TB=1024GB
3.基本数据类型(4类8种)
3.1整数(4种)
类型 | 字节数(个) | 数值范围 | 例子 |
---|---|---|---|
字节型 byte | 1 | -27~27-1( -128~127) | byte a = 100; |
短整型 Short | 2 | -215~215-1( 大概正负3万多) | short s = 1000; |
整型(默认)Int | 4 | -231~231-1( 大概正负21亿) | int a = 100000; |
长整型 long | 8 | -263~263-1 | long a = 100000L; |
3.2浮点数(小数2种)
类型 | 字节数 | 例子 |
---|---|---|
单精度 float | 4 | float f1 = 234.5f; |
双精度 Short | 8 | double d1 = 123.4; |
3.3字符型(char)
char 数据类型可以储存任何字符;占两个字节,赋值时要加上单引号,里面只能是一个字符。
比如: 汉字、数字0-9、字母a-z,A-Z、符号、空格。
下面展示一些 定义char的例子
。
char a = 'a';
char b = 'Z';
char c = '1';
char d = '我';
char f = '¥';
char e = ' ';//空格
3.4布尔型(boolean)
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
默认值是 false;
boolean 占1字节或者4个字节 :
如果使用boolean声明一个基本类型的变量时,因为boolean类型被编译为int类型,那么该变量占4个字节;如果使用boolean声明一个数组类型的时候,因为编码为byte数组,那么每个数组的元素占用8位=1个字节。
下面展示一些 定义boolean的例子
。
boolean one = true;
boolean isFind =false;
4.引用数据类型
引用数据类型有类(例如:String)、接口、枚举、数组。
5.数据类型转换
5.1自动类型转换(隐式转换)
特点:目标大于源类型,小的向大的转换,必须类型兼容。比如:整数和整数,非整和非整,整和非整。
下面展示一些 代码片
。
int a = 10;//4个字节
long b = a;//8个字节,没报错
float c = a;//4个字节,没报错
double d= a;//8个字节,没报错
5.2强制类型转换
特点:目标小于源类型,大的向小的转换,丢失精度
下面展示一些 代码片
。
long a= 888;//8个字节
double b=999;//8个字节
int c= (int)a;//4个字节,没报错
c=(int)b;//8个字节,没报错
byte d=(byte)b;//1个字节,没报错
char e=(char)a;//2个字节,没报错
5.3字符和整数之间的转换:char->int
A-Z:65-90;a-z:97-122;
GBK(中文):《汉字内码扩展规范》;
ASCII:英文、数字、常用符号;
UTF-8:世界上所有文字;
6.人机交互(Scanner)
1.思考:打游戏时,控制英雄的运动和技能是如何实现的?
在键盘上输入的上下左右,游戏程序如何知道?
2.分析:程序中必然有一个装置来接收键盘按键的值。
3.Scanner的使用
分析,记事本上打字的过程:系统接收键盘上的按键对应的字母,然后传入到搜狗输入法,合成相应的文字,然后在电脑屏幕上显示。
4.思考:java程序如何接收键盘输入的内容呢?
Jdk中封装了一个类Scanner,该类的职责就是接收键盘的输入值,并保存到程序的变量中,体现了程序和用户的交互功能。
下面展示一些 使用Scanner的代码片
。
// 使用步骤:
// 1.导包(别人写的类,作为当前类的引用)
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
//2.创建对象
Scanner sc = new Scanner(System.in);
// 3.对象调用方法来接收输入值
System.out.println("请输入胜利!");
String good = sc.next();//接收字符串类型的值
int i = sc.nextInt();//接收整型的值
boolean b = sc.nextBoolean();//接收布尔类型的值
}
}
二、运算符
1.赋值运算符
1.赋值:往变量对应的内存空间里面塞一个值。
2.书写格式: int a = 8; 往往在定义一个变量的时候会为其赋值。
3.赋值特点:新值会覆盖原来的旧值
第一次给变量赋值称为“初始化”。
下面展示一些 交换数值的代码片
。
int a = 5;//等号右边的‘5’赋值给了等号左边的‘a’;
int b = 6;
int c = a;
a = b;
b = c;
//变量a和变量b交换了数值
2.算术运算符
1.基本算术运算:+ - * / 、% 、 ++i、i++、 --i、 i–
重点:++ – 在变量的前面还是后面
下面展示一些 基本算术运算的代码片
。
//前置运算 ++i(先自增,再返回值)
int i= 7;
++i;//先自增7+1,再返回8,此时i=8
// 后置运算 i++(先返回值,再自增)
i= 7;
i++;//先返回7,再自增7+1,下一次使用时i=8
2.复合算术运算:+= -= *= /= %=
下面展示一些 复合算术运算的代码片
。
int a=8;
a += 1;//相当于a=a+1
//a=9
3.关系运算符
== != < > >= <=
关系运算符比较的是符号两边的值,它的结果是布尔值
下面展示一些 关系运算符的代码片
。
int a = 8;
int b = 7;
System.out.println(a == b);;//false
float c=5.2f;
double d=5.2;
System.out.println(c==d);//false
//总结:float和double由于精度不一样小数点后非零的小数与小数之间相比会是false
float c1=5.0f;
double d1=5.0;
System.out.println(c1==d1);//true
//当小数点后都为0时,数值相等,输出true
4.逻辑运算符
参与逻辑运算符的表达式必须是布尔类型,返回值也是布尔类型。
逻辑与 & 逻辑或 |
短路与 && 短路或 ||
如何理解短路:电路图中的短路是:电流绕过某段电器,从导线走。
下面展示一些 逻辑运算符的代码片
。
//与:一错都错,全队才对
System.out.println(true&true);//true
System.out.println(false&&true);//false
System.out.println(false&&false);//false
//或:一对都对,全错才错
System.out.println(true|true);//true
System.out.println(false||true);//true
System.out.println(false||false);//false
//特别注意:
//在短路与&&中,当第一个条件为false时,第二个条件不执行。
//在短路或||中,当第一个条件为true时,第二个条件不执行。
1.&&运算中,第一个条件为false,整个语句结果必然为false,所以程序忽略第二个条件, 此为短路与
2.||运算中,第一个条件为true,整个语句结果必然为true,所以程序忽略第二个条件,此为短路或
3.优先级:! > && > ||
4.当表示1<i<3时可以用 i<3&&i>1.
5.条件运算符
也称三元(三目)运算符
1.书写格式:
2.使用场景:当一个变量的取值有两种可能时,用条件运算符来为变量赋值。
下面展示一些 条件运算符的代码片
。
int score = 85;
System.out.println(score>60?"考试及格":"考试不及格");
6.运算符的优先级
- 单目运算符包括:! ++ --,优先级别高
- 优先级别最低的是赋值运算符
- 可以通过()控制表达式的运算顺序,()优先级最高
- 从右向左结合性的只有赋值运算符、三目运算符和单目运算符
- 算术运算符>关系运算符>逻辑运算符