java 程序运行同时拥有 编译型语言和解释型语言的特点

程序运行流程:

源程序 .java文件 --> Java 编译器--> 字节码 .class 文件 --> 类装饰器 --> 字节码校验器 --> 解释器--> 操作系统平台


数据类型

  1. 基本数据类型

    • 整数类型
      1. byte 1个字节,8位
      2. short 2个字节,16位
      3. int 4个字节, 32位
      4. long 8个字节, 64位
    • 浮点类型
      1. float 4个字节, 32位
      2. double 8个字节,64位
    • char类型
      1. 2个字节, 16位
    • boolean类型
      1. true
      2. false
  2. 引用数据类型

    • 接口
    • 数组

字节

计算机内存的最小存储单元是字节(byte),一个字节就是一个8二进制数,即8个bit。它的二进制表示范围从0000000011111111,换算成十进制是0255,换算成十六进制是00~ff
举例:
定义int a = 1; short b = 9;
在计算机内存中分别表示为:
00000000 00000000 00000000 00000001
00000000 00000011

为什么byte类型的区间是 -128 - 127之间呢?
一个byte 在计算机内存中是 8位。
则定义区间为:
10000000 ~ 01111111 -> -128 ~ 127
(这里涉及到计算机基础知识:原码、反码、补码 的知识。)
简易记住 各类型区间的范围的方法:-2^(8*字节数) ~ 2^(8*字节数)-1

位运算

对于正数来讲:

int a = 9;

在计算机内存中表示为: 00000000 00000000 00000000 00001001

a = a << 2; 代表 : 00000000 00000000 00000000 00100100

则a = a * 2 * 2 = 36;

a = a >> 2; 代表 : 00000000 00000000 00000000 00000010

则a = a / 2 / 2 = 2;

位运算是按位进行与、或、非和异或的运算

两个整数进行位运算,实际上就是按位对齐,然后依次对每一位进行运算

与 &: 两个数的同一位,都为1时,结果才为1

或 |: 两个数的同一位,有一个为1时,结果为1

非 ~: 01 互换

异或 ^:如果两个数不同,结果为1,否则为0

    public static void main(String[] args) {
        int i = 167776589;  // 00001010 00000000 00010001 01001101
        int n = 167776514;  // 00001010 00000000 00010001 00000010

        int p = 167776512;  // 00001010 00000000 00010001 00000010
        int q = 167776591;  // 00001010 00000000 00010001 01001111
        int m = -167776590; // 11110101 11111111 11101110 10110010
        int o = 79;         // 00000000 00000000 00000000 01001111
        System.out.println((i & n) == p); // 与 true
        System.out.println((i | n) == q); // 或 true
        System.out.println(~i == m); // 非 true
        System.out.println((i ^ n) == o); // 异或 true
    }

运算优先级

在Java的计算表达式中,运算优先级从高到低依次是:

  • ()

  • ! ~ ++ --

  • * / %

  • + -

  • << >> >>>

  • &

  • |

  • += -= *= /=

    括号在第一;不等取反自加减;乘除取模排第三;加减高于位移符,与1或2加减乘除等

posted on 2021-11-02 20:36  木子同学  阅读(34)  评论(0编辑  收藏  举报