Java 2. 量与常量
-
常量:
- 固定不变的值 3.14 'a' true 所有基本数据类型的值都是常量
- 特殊的常量 'abc' -->String,String是一个引用数据类型,他的值很特殊,可以简单的视为常量
- 自己创建的空间,存储一个值,让他固定起来,不能改变
int UP = 1; 还可以改变UP这个二空间存的值 final int UP = 1; 使用final修饰 UP空间, UP在运行过程就不能再改变
-
变量:
- 在程序执行过程可以改变的
- 变量是一个内存空间(小容器)
- 变量空间在创建(声明)的时候 必须指定数据类型 变量空间的名字
- 变量空间 里面只能存储一个内容(值 引用)
- 变量空间内的内容可以改变
int a;
String b;
- 需要注意:
- 变量是一个空间 可以只创建空间 里面不存放内容
- 变量空间创建后是没有默认的内容 空的
- 空的变量空间不能拿来使用 编译错误
note 1:
public class Test{
public static void main(String[] args){
byte x; //声明一个变量空间 空间的名字是x 空间内要求存储的类型是byte整数
x = 1; //将一个1赋值到x空间内进行存储
}
}
-
计算机底层做了什么事情?
-
x是什么? 变量空间 存在哪里? --栈内存里
-
1是什么? 1是常量 存在哪里? --常量缓冲区
-
=是什么? =是赋值 做了什么?
-
硬盘上创建一个文件 Test.java
-
文件中的内容是我们编写的源代码(跟计算机发送指令)
public class Test{ public static void main(String[] args){ byte x; x = 1; } }
-
将Test.java源文件-->编译-->Test.class
字节码 留给计算机识别 -
执行 -->内存中执行 将硬盘上的Test.class内容加载到内存里
-
我们写好的指令 执行内存的空间 赋值 变化。。。
note 2:
float x = 3.4;
- 从double转化到float会有损失,比如1,3.4都是常量值,存储在常量缓冲区中,常量值的存储形式肯定不是十进制,是以二进制形式储。
- 1 --> 32bit 存储的如果是整数,相当于int类型。
- 3.4 -- 64bit 存储的如果是小数,相当于double类型,因为机器为了更精确的显示小数,会把他当作double类型存储在double的空间里。
- 所以 3.4是从double空间拿出来存到float空间,存不进去, 需要人为加个F告诉机器。
float x = 3.4F;
note 3:
那么byte a=1;为什么不会报错? 1是32bit的,byte是8bit的,存不下1啊
1-->32bit
00000000 00000000 00000000 00000001
a-->8bit
00000001
=赋值的时候做了一个自动的决定,自动类型转换,把前面的24个0去掉了,前提必须是0
note 4:
double为什么不能自动转化为float?因为算法不一样,
- float 4字节 32bit 1个符号位+9个整数的部分+22个表示小数的部分 0 000000000 22个0.。。
- double 8字节 64bit 1个符号位+19个整数的部分+44个小数的部分
note 5:
long d = 2147483648L;
int 范围-2147483648~2147483647
如果创建的常量值超过以上范围(int范围)
程序编译检测的时候会认为 数字太大
如果我们真的需要那么大的数字 必须在后面加L告知机器
note6:
String i = "abc";
字符 | 字符串 |
---|---|
char | String |
基本数据类型 | 引用数据类型 |
'a' | 'a' 'abc' '' null |
- 变量赋值
更多学习笔记移步
https://www.cnblogs.com/kknote