Java 2. 量与常量

  1. 常量:

    • 固定不变的值 3.14 'a' true 所有基本数据类型的值都是常量
    • 特殊的常量 'abc' -->String,String是一个引用数据类型,他的值很特殊,可以简单的视为常量
    • 自己创建的空间,存储一个值,让他固定起来,不能改变
    int UP = 1;  还可以改变UP这个二空间存的值 
    final int UP = 1;  使用final修饰 UP空间,  UP在运行过程就不能再改变
  2. 变量:

    • 在程序执行过程可以改变的
    • 变量是一个内存空间(小容器)
    • 变量空间在创建(声明)的时候 必须指定数据类型 变量空间的名字
    • 变量空间 里面只能存储一个内容(值 引用)
    • 变量空间内的内容可以改变
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是常量 存在哪里? --常量缓冲区

  • =是什么? =是赋值 做了什么?

  1. 硬盘上创建一个文件 Test.java

  2. 文件中的内容是我们编写的源代码(跟计算机发送指令)

    public class Test{
     public static void main(String[] args){
         byte x; 
         x = 1;    
     }
    }
  3. 将Test.java源文件-->编译-->Test.class
    字节码 留给计算机识别

  4. 执行 -->内存中执行 将硬盘上的Test.class内容加载到内存里

  5. 我们写好的指令 执行内存的空间 赋值 变化。。。

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";

字符字符串
charString
基本数据类型引用数据类型
'a''a' 'abc' '' null
  • 变量赋值

posted @ 2022-04-05 19:07  我是一言  阅读(24)  评论(0编辑  收藏  举报