跳转至

第3章 Java的基本程序设计结构

Java 没有方法可以直接查看类型或变量的大小。

整型

类型 大小
byte 1字节
short 2字节
int 4字节
long 8字节
  • 没有无符号整型。通常使用Byte.toUnsignedInt(b) 将一个有符号的 byte 类型 b 转换成无符号的 int ,以及 Integer.toUnsignedLong(i); 来将一个有符号的 int 类型 i 转换成无符号的 long
  • 类型的大小与机器无关(java 是跨平台的)。

char类型

  • char 类型占用 2 字节。
  • 可以用 \u 加上 4 个十六进制表示一个 char
  • 有些 Unicode 可以用一个 char 值描述(2字节),有些需要两个 char 值(4字节)。

Unicode和char类型

  • 码点(codepoint) 就是一个编码表中某个字符对应的代码值。java 使用 Unicode 编码机制。前缀 U+ 来表示一个 Unicode 字符,例如 U+0041 就是 'A' 的码点。

  • java 使用 UTF-16 来表示字符,这种编码方式使用 2 个字节来表示大多数常用字符,对于其他不太常用的字符使用使用 4 个字节表示。

  • 2 个字节称为一个 代码单元(code unit) ,在 java 中, char 类型描述了 UTF-16 编码中的一个代码单元。对于大多数字符,char 可以直接表示,但某些字符需要两个 char 才能表示。因此,不建议在程序中使用 char 类型。

boolean类型

  • java 中零值不能解析为 false ,例如整数的 0,对象的 null 等。

字符串

java 中的字符串是 String 类型,是 Unicode 字符序列。

  • .substring(l, r) 方法返回一个 \([l, r)\) 的子串。
  • String 不支持原地修改。字符串变量的复制实质是共享同一段字符串。
  • 不要使用 == 检测两个字符串相等,这只能检测两个字符串变量是否共享同一段。如果要检测两个字符串的内容是否相等,要用 .equals() 方法。String 中还有一个 .compareTo() 方法类似于 C语言 中的 strcmp() 函数。
  • 新建一个字符串是 nullnull 表示没有引用任何对象,并不是空串的意思。检测空串可以用 .length() == 0 或者 .equals("")
  • .length() 返回代码单元(char)的数量,.codePointCount(l, r) 可以返回 \([l, r)\) 的码点(Unicode) 的数量。对于可能存在 4 字节的码点的字符串,遍历时需要注意。

  • StringBuildStringBuffer 是支持原地修改的字符串。其中,StringBuild 速度更快,但不是线程安全的。StringBuffer 是线程安全的。

日期与时间

对于新的代码,应该使用 java.time 包来表示时间点。旧的代码可能会使用 Date 类来表示时间点。

数组

  • 将一个数组变量赋给另一个数组变量,实质是引用相同的数组对象。也就是 浅拷贝深拷贝 要用 Arrays.copyOf() 方法。
  • java 的多维数组支持“不规则”,并不要求每一行都有相同的列数。

最后更新: 2023-10-05
创建日期: 2023-10-05