基本数据类型

数值型 | 范围

  • Byte |8
  • Short |16
  • Int | 32
  • Float |32
  • Double |64
  • Long |64

    字符型

  • Char |16

    布尔型

  • Boolean

    范围

    | byte | short | int | float | double | long | char | boolean | | —- | —- | —- | —- | —- | —- | —- | —- | | 8 | 16 | 32 | 32 | 64 | 64 | 16 | 1、8、32 | | -2(2-1) | -2~(2-1) | -231~(231-1) | -231~(231-1) | -263~(263-1) | -263~(263-1) | -2~(2-1) | | | | | | | | | | |

  • Boolean占用几个字节 | 取决于JVM虚拟机

    • 未精确定义大小。Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。
    • 1位:Boolean只标识真假2个状态,1位就够。
    • 8位:计算机处理数据字节位单位(8bit),其他位0填充。
    • 32位:在《Java虚拟机规范》一书中的描述虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”
      • int代替原因:32位cpu一次处理32位,寻址只能32位为基本单位,int最合适。

JAVA基础—String

特点
  • 实际存储为 final char[] 数组
  • 长度限制 总结:编译器2^16-2=65534,运行期:2^32-1=2147483647个字符

    • 其中自定义构造函数长度为(int count),所以int最大范围,java.lang.Integer #MAX_VALUE是2^31-1=2147483647个字符。但是若是在字符常量池中的变量,最多只有65534(2^16-2,null2字节)个字符,超过编译器就会报错。
    • 因常量池也有自己的类型,java的utf-8编码的unicode自读在常量池中以CONSTANT_Utf8类型表示.
      1. CONSTANT_Utf8_info {
      2. u1 tag;
      3. u2 length;
      4. u1 bytes[length];
      5. }
  • 字符与字节

    • GBK:英文一个中文两个
    • ACSII:英文字母一个字节,中文两个字节,一个二进制序列,在计算机中作为一个数字单元,一般为8位二进制,换算为十进制最小0最大255
    • UTF-8:英文字符一个字节,中文三个字节
    • Unicode:英文两个字节,中文两个字节