目录
一.电脑解析java文件
二.两种存储形式
*磁盘的储存方式:磁单元存储(3-5ms)
通过改变磁头线圈中的电流方向进而改变磁颗粒的磁场方向来实现01存储。电生磁存储,磁生电读取。读取时找到磁单元很浪费时间。
*内存的储存方式:电容存储(20ns)
存储时充电,读取时放电。(充电代表1,补充代表0)
三.数据类型
数据类型
1.基本数据类型
(1)整型:byte short int long
(2)浮点型:float double
(3)布尔型:boolean
(4)字符型:char
2.引用数据类型
四.各类型存储结构
五.字符串
public class Demo{ public static void main(String[] args){ String a = "123"; String b = "123"; System.out.printin(a == b); } }
a和b是引用类型,引用类型作比较是判断地址,而基本数据类型则是判断值。
故而输出应为True。
public class Demo{ public static void main(Strng[] args){ String a = "123"; String b = "123"; String c = new String("123"); System.out.println(a == b); } }
1.局部变量在栈中存字符串常量池里面的地址,相同字符串共用,减少内存损耗。
2. xxx.class文件进入方法区。
3. == 基本数据类型比较的是数值,而对于引用类型则是判断地址。
String c = new String("123"); //new 关键字是在堆内存中开辟内存空间
六.编码
源码:数据转化为二进制的数。
byte a = 10; //00001010(源码) byte b = -10; //10001010(源码)
反码:对于正数来说不变,负数来说除第一位符号位不变以外0->1,1->0.
#反码
正数的反码 = 源码
负数的反码 = 源码的符号位不变,其余按位取反
a:反码:00001010(反码)
b:反码:11110101(反码)
补码:对于正数来说不变,负数来说在反码基础上末尾位加1.
#补码
正数的补码 = 反码 = 源码
负数的补码 = 在反码的基础上末尾+1
a:反码:00001010(补码)
b:反码:11110110(补码)
此时执行a+b
00001010(补码)
+ 1111 0110(补码)
-------------------------------------------
100000000
(因为数据类型规定了数据在内存当中的存储大小,此时需要截取数据)
因此变为0000 0000其源码则是0000 0000 = 0
计算机当中存储数值类型数据使用的是补码的形式
计算机进行存储时是将源码转化为补码进行计算,最后再从右向左以存储数据类型的大小保留位数。
一个像素点大小:56bit
显示器显示数据:
1.视觉信息
2.颜色(每个像素点显示:红黄蓝三原色(0-255) 3byte)
3.亮点
4.坐标 (每个像素点坐标 2 Short )
2 short = 4 byte 则一个像素点 7byte = 56bit
一些字符如果用像素点表示的话太大故而采用字符集表示(ASCll编码),存储位置只记录文档左上角的坐标,颜色则单独存储。
乱码问题
乱码:发送方和接收方采用了不同的字符集转换二进制的数据。
(编码)例题 :
1.
public class Test{ public static void main(String[] args){ byte a =1; byte b =127; byte c = (byte)(a+b); System.out.println(c); } }
输出为:-128
1000 0000 -128
...........
1111 1100 -4
1111 1101 -3
1111 1110 -2
1111 1111 -1
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 3
0000 0101 4
......
0111 1111 127
0111 1111 + 1 = 1000 0000(补码)即-128 变为0111 1111(反码)变为1000 0000(源码)这些数值可以包成一个圈连起来,这样强制类型转化时二进制不会超出范围,而是返回错误的值。