1.整数的存储
a)正整数的存储
把正整数转化为二进制,然后存储在内存中。
7 --转化为二进制--> 0000-0000 0000-0000 0000-0000 0000-0111
补充:7属于整数常量,也就是属于int类型,int类型占用四个字节。
b)负整数的存储
-7,首先先获取-7的原码,然后再获取反码,最后再获取补码。
原码:把负整数取绝对值,然后获取该绝对值的二进制
0000-0000 0000-0000 0000-0000 0000-0111
反码:就是把原码的每一个二进制位取反,0-->1, 1-->0
1111-1111 1111-1111 1111-1111 1111-1000
补码:就是在反码的基础上+1
1111-1111 1111-1111 1111-1111 1111-1001
终极结论:正整数的最高位一定是0
负整数的最高位一定是1
2.正整数的加法运算(了解)
7 + 6 = 13
7 0000-0000 0000-0000 0000-0000 0000-0111
+ 6 0000-0000 0000-0000 0000-0000 0000-0110
--------------------------------------------------
= 13 0000-0000 0000-0000 0000-0000 0000-1101
3.关键字和保留字
关键字:就是java语言中已经事先定义好具有特殊含义的名字。
保留字:目前java语言中还没有使用(暂时没有特殊含义),但是java后期可能会使用
4.标识符
4.1标识符的作用?
用于给变量、常量、类、包和方法取名的规则。
4.2标识符的规则
a)由数字、字母、下划线和$组成,但是开始不能为数字。
b)标识符不能是关键字或保留字。
c)标识符对长度没有任何限制。
补充:因为java采用的是unicode编码,所以标识符还可以是中文,但是不建议使用。
4.3命名规范
类名:大驼峰。每个单词首字母都是大写。例如:VariableDemo
变量名、方法名:小驼峰。首单词字母小写,其余单词首字母大写。例如:userName
常量名:全部单词大写,多个单词以下划线连接。例如:MAX_VALUE
包名:单词全部小写。
5.变量
5.1变量的本质是什么??
变量在内存中开辟一块内存空间(容器),用来存储数据的容器。
5.2变量的声明
本质:在内存中开辟一块指定大小的内存空间,用于准备存储指定类型的数据。
语法:数据类型 变量名;
int num1; --> int占用四个字节
byte num2; --> byte占用一个字节
5.3变量的赋值
本质:通过变量名找到内存中的存储空间,然后把等号右边的数据存入该内存中间中。
语法:变量名 = 数据;
num1 = 10;
num2 = 20;
注意事项:
1."=",赋值运算符,把等号右边的数据赋值给等号左边的变量
2.赋值的数据类型必须和声明变量的数据类型保持一致。
![66effd6e7712d62f4dbd3a1b5c63638f.png](https://img-blog.csdnimg.cn/img_convert/66effd6e7712d62f4dbd3a1b5c63638f.png)
变量
6.常量
6.1常量和变量对比
常量:只能赋值一次,赋值完毕以后就无法再次赋值了。
变量:可以重复多次执行赋值操作。
6.2固定值常量
整数常量:10, 20, ....
小数常量:123.45, 3.1415926, ...
字符常量:'a', '1', '我', ...
使用单引号包裹的一个字符,我们称之为字符常量
布尔常量:true和false
字符串常量:"hello world", "", "sxt", ...
使用双引号包裹的内容,都属于字符串常量
引用数据类型常量:null
6.3使用final关键字修饰的常量
常量声明语法:final 数据类型 常量名;
final int NUM;
常量名的命名规范:单词全部大写,多个单词以下划线连接。
常量名的命名规则:必须遵守“标识符”的命名规则。
7.数据类型分类
a)基本数据类型(今天学习)
八大基本数据类型
b)引用数据类型(后面学习)
数组,字符串,对象,...
8.基本数据类型
数值型
整数型
byte类型
short类型
int类型
long类型
浮点型
double类型
float类型
字符型
char类型
布尔型
boolean类型
8.1.整数型
byte类型,1个字节,-128到127,-2^7到2^7-1
short类型,2个字节,-32768到32767,-2^15到2^15-1
int类型,4个字节,大概在正负21亿之间,-2^31到2^31-1
long类型,8个字节,非常大,-2^63到2^63-1
注意事项:
1)根据你需要存储的数据范围,来合理的选择使用数据类型。
避免存储的数据超出数据类型的表数范围。
例如:byte num = 128;
避免使用的数据类型不合适浪费内存空间。
补充:现实开发中,一般只使用int和long即可.
2)整数型固定值常量的默认类型是int类型。
long num = 10000000000; // 10000000000超出了int的表数范围
3)在整数型固定值常量末尾添加“L”或“l”,那么该常量就变为了long类型常量了
建议:建议使用“L”,不建议使用“l”
4)关于整数型固定值常量还有哪些呢???
a)十进制固定值常量,例如:1, 2, 3, ...
b)八进制固定值常量,例如:017, 011, ...
c)十六进制固定值常量,例如:0x1A, ...
8.2.浮点型(小数型)
float类型,4个字节,能精确到小数点后7位,单精度类型。
double类型,8个字节,精确度是float类型的两倍,双精度类型。
注意事项:
1)现实开发中,我们使用double类型较多。
2)固定值小数常量的默认数据类型为double类型。
3)在小数固定值常量默认添加“F”或“f”,那么该常量就变为了float类型的常量了
4)因为小数的存储方式不一样,那么最好不要对小数最非常精确的比较
5)小数的固定值常量有哪些???
十进制小数常量,例如:12.34, 3.14, ...
使用科学计算法表示小数常量,例如:3.1E5, 3.1E-3
3.14E2,等效于:314.0,也就是小数点往右移动两位
3.14E-2,等效于:0.0314,也就是小数点往左移动两位
8.3.布尔型,boolean类型
常量值:true,false
true: 代表真或条件成立
false: 代表假或条件不成立
布尔类型的使用场合:
常用于条件判断,例如:条件成立该做什么事,条件不成立又该做什么事。
随堂案例:
判断两个变量的最大值。
技能:a)boolean
b)if选择结构
语法:if(条件表达式) {
// 当“条件表达式”为true的时候执行
}
else {
// 当“条件表达式”为false的时候执行
}
8.4.字符型,char类型
占用2个字节
常量:使用单引号包裹的一个字符,我们称之为字符常量。
8.5.字符串,String类型(后续会深入学习)
常量:使用双引号包裹的内容(可以是任意多个字符组成),我们称之为字符串常量。
字符串和字符的关系
就类似于羊肉串和羊肉的关系
字符串 --> 羊肉串
字符 --> 羊肉
字符串和别的数据类型做+运算,其实做的是拼接运算。
String str = "hello world" + 30;
System.out.println(str); // 输出:"hello world30"
9.字符是如何存储在内存中的???
Unicode编码,占2个字节,可允许有65536个字符,一个中文字符在内存中占用2个字节。
Unicode编码的前128位和ASCII表码表一模一样。
'a' -->97
'A' -->65
'1' -->49
![6043719476ad144c3a74712ba7c78828.png](https://img-blog.csdnimg.cn/img_convert/6043719476ad144c3a74712ba7c78828.png)
字符存储
![baadc3a3050bf24e6aa34bdb2d3621d6.png](https://img-blog.csdnimg.cn/img_convert/baadc3a3050bf24e6aa34bdb2d3621d6.png)
ASCII
10.字符型和int类型的区别和联系
共同点:
在内存中存储的都是整数!
不同点:
1)字符型在内存中存储的是正整数,而int类型在内存中既可以存储负整数还可以存储正整数。
2)char类型占用2个字节,int类型占用4个字节。
char类型表数的数据范围小于int类型
字符型和int类型相互转换
字符型 --> int类型
char c = 'a';
int num = c; // 字符型转换为int类型,隐式类型转换
int类型 --> 字符型
char c = (char)97; // int类型转换为字符型,强制类型转换
11.常见的转义字符
t, 制表符,类似于按下tab键
n, 换行符,类似于按下enter键
", 展示的时候,只显示输出"
', 展示的时候,只显示输出'
, 展示的时候,只显示输出
使用方式:
a)把转义字符直接放在字符串内部使用
System.out.println("hellonworld");
b)使用char类型配合来使用转义字符
char c = 'n'; // 此处的 n 一定要看成是一个整体
System.out.println("hello" + c + "world");
注意事项:
使用char类型保存转义字符的时候,切记不要和int类型做+运算
char c = 'n';
System.out.println(11 + c + 11); // c变量从char类型会隐式转化为int类型
输出的结果为32,而不是我们想要的两个11换行显示。
12.基本数据类型转换概述
1.1为什么需要数据类型转换???
因为java是强类型语言,所以要求执行“赋值运算”和“算数运算”的
时候,参与运算的数据类型必须保持一致。
1.2基本数据类型转换的方式有哪些???
a)隐式类型转换,无需程序员手动处理
b)强制类型转换,需要程序员手动处理
1.3那么基本数据类型可以相互转换???
除了boolean类型之外,其余的数据类型在内存中存储的都是数值。
所以,除了boolean类型之外,其余的数据类型都可以相互转换。
13.隐式类型转换
原则:从低字节向高字节转换(提升)。
byte --> short --> int --> long --> float --> double
char --> int
赋值运算:从低字节向高字节转换(提升)。
特例:把int类型常量赋值给byte、short和char类型的变量时,
属于自动类型转换的特例,只需不超出其表数范围即可。
条件:a)int类型常量
b)不超出其表数范围
算数运算:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
常见面试题:
1、byte b1 = 11; byte b2 = 12;byte sum = b1 + b2; 错误
原因:两个byte类型运算之后的结果为int类型
和int num1 = 100; int num2 = 300; int sum = num1 + num2;
如何确定以上代码是对的???
a)检查语法是否正确,编译
b)检查逻辑是否正确,解释执行,运行时
哪一个正确呢?
2、请问说出100000L*100000*100000 正确
和100000*100000*100000 // 错误
的区别?
3、int num1 = 90000; int num2 = 90000; int total = num1 * num2;
请问total的结果是多少?
不知道,因为81亿已经超出了int类型的表数范围,返回的结果是一个无意义的数
![352b0a95ac2158d58951c9ca6139fb0f.png](https://img-blog.csdnimg.cn/img_convert/352b0a95ac2158d58951c9ca6139fb0f.png)
隐式类型转换_赋值运算
![8b699d3de3c063d26afc3b6d03de2b95.png](https://img-blog.csdnimg.cn/img_convert/8b699d3de3c063d26afc3b6d03de2b95.png)
隐式类型转换_算数运算