变量与运算符

文章目录

  • 一.关键字(keyword)
  • 二.标识符(identifier)
  • 三.变量
  • 四.计算机存储单位
    • 4.1 整数类型
    • 4.2 浮点类型:float、double
    • 4.3 字符类型
    • 4.4 布尔类型:boolean
  • 五. 基本数据类型变量间运算规则
    • 5.1 自动类型提升
    • 5.2 强制类型转换
    • 5.3 基本数据类型与String的运算
  • 六.计算机底层如何存储数据
    • 6.1 进制的分类
    • 6.2 进制的换算举例
    • 6.3 二进制的由来
    • 6.4 二进制转十进制
    • 6.5 十进制转二进制
    • 6.6 二进制与八进制、十六进制间的转换
    • 6.7 各进制间的转换
  • 七.运算符
    • 7.1 算术运算符
    • 7.2 赋值运算符
    • 7.3 比较(关系)运算符
    • 7.4 逻辑运算符
    • 7.5 位运算符
    • 7.6 条件运算符(三元运算符)
    • 7.7 运算符优先级
  • 八.关于字符集
    • 8.1 字符集
    • 8.2 ASCII码
    • 8.3 ISO-8859-1字符集
    • 8.4 GBxxx字符集
    • 8.5 Unicode码
    • 8.6 UTF-8

一.关键字(keyword)

  1. 被Java语言赋予了特殊含义,用做专门用途的字符串(或单词)
  • 例如:class、public、static、void
  1. 特点:关键字都是小写字母
  2. 官方地址:
    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

说明:

  1. 关键字一共50个,其中constgoto保留字(reserved word)。
  2. truefalsenull不在其中,它们看起来像关键字,其实是字面量,表示特殊的布尔值和空值。

二.标识符(identifier)

  1. 定义:Java中变量、方法、类等要素命名时使用的字符序列,称为标识符。即凡是自己可以起名字的地方都叫标识符。
  • 例如:类名、方法名、包名、常量名
  1. 命名规则:

由26个英文字母大小写,0-9 ,_或 $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。

  1. 标识符的命名规范

包名:多单词组成时所有字母都小写:xxxyyyzzz。
例如:java.lang、com.atguigu.bean

类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
例如:HelloWorld,String,System等

变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
例如:age,name,bookName,main,binarySearch,getName

常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
例如:MAX_VALUE,PI,DEFAULT_CAPACITY


三.变量

  1. 概念:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
  2. 变量构成三要素:数据类型、变量名、存储的值
  3. Java变量声明格式:数据类型 变量名 = 变量值
  4. 变量的作用:用于在内存中保存数据。
  5. 使用变量注意:
  • Java中每个变量必须先声明,后使用。
  • 使用变量名来访问这块区域的数据。
  • 变量的作用域:其定义所在的一对{ }内。
  • 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
  • 同一个作用域内,不能定义重名的变量。
  1. Java中变量的数据类型:
  • 基本数据类型:包括 整数类型浮点数类型字符类型布尔类型。具体有8种:
    • 整形:byte \ short \ int \ long
    • 浮点型:float \ double
    • 字符型:char
    • 布尔型:boolean
  • 引用数据类型:包括数组接口枚举注解记录

注意:变量都有其作用域。变量只在作用域内是有效的,出了作用域就失效了

  1. 变量的使用
  • 步骤1:变量的声明
变量声明格式:数据类型  变量名;

注意:变量的数据类型可以是基本数据类型,也可以是引用数据类型。

  • 步骤2:变量的赋值
    给变量赋值,就是把“值”存到该变量代表的内存空间中。同时,给变量赋的值类型必须与变量声明的类型一致或兼容。
变量赋值语法格式:变量名 =;

内存结构如图:
变量与运算符_第1张图片


四.计算机存储单位

4.1 整数类型

变量与运算符_第2张图片

字节(Byte): 是计算机用于计量存储容量基本单位,一个字节等于8 bit。
位(bit): 是数据存储的最小单位。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。
转换关系:

  • 8 bit = 1 Byte
  • 1024 Byte = 1 KB
  • 1024 KB = 1 MB
  • 1024 MB = 1 GB
  • 1024 GB = 1 TB

声明long类型变量时,需要提供后缀。后缀为“l”或“L”

4.2 浮点类型:float、double

在这里插入图片描述

声明float类型变量时,需要提供后缀。后缀为“f”或“F”
注意:并不是所有的小数都能可以精确的用二进制浮点数表示。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。
例如:

System.out.println(0.1 + 0.2);//结果为0.30000000000000004

浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。如果需要精确数字计算或保留指定位数的精度,需要使用BigDecimal类

4.3 字符类型

  1. 字符类型:char(2字节)
  2. 表现形式:
  • 使用一对 ’ ’ 表示,内部有且仅有一个字符。例如:
char c1 = 'a';
char c2 = '中';
char c3 = '1';
char c4 = '&';
char c5 = 'α';
  • 直接使用 Unicode值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。例如:\u0023 表示 ‘#’。
  • 使用转义字符。例如:char c3 = ‘\n’; // '\n’表示换行符。
  • 使用具体字符对应的数值。(比如ASCII码)。例如:char c4 = 97; //c4表示为a。

4.4 布尔类型:boolean

  • boolean 类型用来判断逻辑条件,一般用于流程控制语句中
  • boolean类型数据只有两个值:true、false,无其它。
  • 不谈boolean类型占用空间大小。但在内存分配中占4个字节,true看做1,false看做0。

五. 基本数据类型变量间运算规则

在Java程序中,不同的基本数据类型(只有7种,不包含boolean类型)变量的值经常需要进行相互转换。

转换的方式有两种:自动类型提升强制类型转换

5.1 自动类型提升

规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。

int i1 = 10;
int i2 = i1;
long l1 = i1;
float f1 = l1;

即 byte 、 short 、char --> int --> long --> float --> double
特殊情况:byte、short 、char类型的变量之间做运算,结果为int类型。
练习:

long l2 = 123L;//通过
long l3 = 123;//通过。理解为:自动类型提升
long l4 = 123123123123;//不通过。123123123123理解为int类型,因为超出了int范围,所以报错。
long l5 = 123123123123L;//通过。此时的123123123123L就是使用8个字节存储的long类型的值

float f2 = 12.3F;//通过
float f3 = 12.3;//不通过。不满足自动类型提升的规则

byte b5 = 10;//通过
byte b6 = b5 + 1;//不通过
int ii1 = b5 + 1;//通过
//浮点型常量,规定是double类型
double dd1 = b5 + 12.3;//通过。

//说明为什么不允许变量名是数字开头的。为了“自洽”
int 123L = 12;//不通过
long 16 = 123L;//不通过

5.2 强制类型转换

规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小)的类型。可能会出现精度损失。
转换格式:

数据类型1 变量名 = (数据类型1)被强转数据值;  //()中的数据类型必须<=变量值的数据类型
double d1 = 12;//自动类型提升
int i1 = d1;//不通过
int i2 = (int)d1;//通过。强制类型转换
long l1 = 123;//通过
short s1 = l1;//不通过
short s2 = (short)l1;//通过。强制类型转换

5.3 基本数据类型与String的运算

  1. 对String的理解

String类,属于引用数据类型,俗称字符串。
String类型的变量,可以使用一对" "的方式进行赋值。
String声明的字符串内部,可以包含0个,1个或多个字符。

  1. String与基本数据类型变量间的运算

任意八种基本数据类型的数据与String类型只能进行连接“+”运算,且结果一定也是String类型

int num1 = 10;//通过
boolean b1 = true;
String str4 = "hello";
System.out.println(str4 + b1);
String str5 = str4 + b1;
String str6 = str4 + b1 + num1;
System.out.println(str6);//hellotrue10

String str7 = b1 + num1 + str4;//不通过。此时系统把第一个+视为算数加减运算而不是连接符

六.计算机底层如何存储数据

计算机世界中只有二进制,所以计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。

6.1 进制的分类

  • 十进制(decimal)
    • 数字组成:0-9
    • 进位规则:满十进一
  • 二进制(binary)
    • 数字组成:0-1
    • 进位规则:满二进一,以0b0B开头
  • 八进制(octal):很少使用
    • 数字组成:0-7
    • 进位规则:满八进一,以数字0开头表示
  • 十六进制
    • 数字组成:0-9,a-f
    • 进位规则:满十六进一,以0x0X开头表示。此处的 a-f 不区分大小写
int num1 = 103;//十进制
int num2 = 0b10;//二进制
int num3 = 023;//八进制
int num4 = 0X23a;//十六进制

6.2 进制的换算举例

十进制 二进制 八进制 十六进制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 a或A
11 1011 13 b或B
12 1100 14 c或C
13 1101 15 d或D
14 1110 16 e或E
15 1111 17 f或F
16 10000 20 10

6.3 二进制的由来

二进制,由德国数理哲学大师莱布尼茨于1679年发明。

6.4 二进制转十进制

二进制如何表示整数?

  • 计算机数据的存储使用二进制补码形式存储,并且最高位是符号位

    • 正数:最高位是0
    • 负数:最高位是1
  • 规 定

    • 正数的补码与反码、原码一样,称为三码合一
    • 负数的补码与反码、原码不一样:
      • 负数的原码:把十进制转为二进制,然后最高位设置为1
      • 负数的反码:在原码的基础上,最高位不变,其余位取反(0变1,1变0)
      • 负数的补码:反码+1

二进制转十进制:权相加法

针对于byte数据举例来说:
变量与运算符_第3张图片

  • 例如:byte类型(1个字节,8位)

    25 ==> 原码 0001 1001 ==> 反码 0001 1001 -->补码 0001 1001

    -25 ==>原码 1001 1001 ==> 反码1110 0110 ==>补码 1110 0111

整数:
正数:25 00000000 00000000 000000000 00011001(原码)
正数:25 00000000 00000000 000000000 00011001(反码)
正数:25 00000000 00000000 000000000 00011001(补码)
负数:-25 10000000 00000000 000000000 00011001(原码)
负数:-25 11111111 11111111 111111111 11100110(反码)
负数:-25 11111111 11111111 111111111 11100111(补码)

一个字节可以存储的整数范围是多少?

//1个字节:8位
0000 0001 ~ 0111 111 ==> 1~127
1000 0001 ~ 1111 1111 ==> -127 ~ -1
0000 0000 ==>0
1000 0000 ==> -128(特殊规定)=-127-1

6.5 十进制转二进制

十进制转二进制:除2取余的逆
变量与运算符_第4张图片

6.6 二进制与八进制、十六进制间的转换

二进制转八进制
变量与运算符_第5张图片

二进制转十六进制
变量与运算符_第6张图片

八进制、十六进制转二进制
变量与运算符_第7张图片

6.7 各进制间的转换

变量与运算符_第8张图片


七.运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

运算符的分类:

  • 按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符
分类 运算符
算术运算符(7个) +、-、*、/、%、++、–
赋值运算符(12个) =、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等
比较(或关系)运算符(6个) >、>=、<、<=、==、!=
逻辑运算符(6个) &、|、^、!、&&、||
位运算符(7个) &、|、^、~、<<、>>、>>>
条件运算符(1个) (条件表达式)?结果1:结果2
Lambda运算符(1个) 1.一个参数:param=>expr
2.多个参数:(param-list)=>expr
  • 按照操作数个数分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
分类 运算符
一元运算符(单目运算符) 正号(+)、负号(-)、++、–、!、~
二元运算符(双目运算符) 除了一元和三元运算符剩下的都是二元运算符
三元运算符 (三目运算符) (条件表达式)?结果1:结果2

7.1 算术运算符

  • 基本语法
    变量与运算符_第9张图片

  • “+”号的两种用法

    • 第一种:对于+两边都是数值的话,+就是加法的意思
    • 第二种:对于+两边至少有一边是字符串的话,+就是拼接的意思

++a与a++区别:++a先自增再赋值,a++先赋值再自增.(减号同理)
++和–运算不会改变变量的数据类型!

int a1 = 10;
int  b1 = ++a1;
System.out.println("a1 = " + a1 + ",b1 = " + b1);//a1 = 11,b1 = 11

int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2);//a2 = 11,b2 = 10

7.2 赋值运算符

基本语法

  • 符号:=
    • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
    • 支持连续赋值
  • 扩展赋值运算符: +=、 -=、*=、 /=、%=
赋值运算符 符号解释
+= 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量
-+ 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量
*+ 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量
/+ 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量
%+ 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量

7.3 比较(关系)运算符

变量与运算符_第10张图片

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。

  • > < >= <= :只适用于基本数据类型(除boolean类型之外)

    == != :适用于基本数据类型和引用数据类型

  • 比较运算符“==”不能误写成“=

7.4 逻辑运算符

  • 基本语法
    变量与运算符_第11张图片

  • 逻辑运算符,操作的都是boolean类型的变量或常量,而且运算得结果也是boolean类型的值。

  • 运算符说明:

    • & 和 &&:表示"且"关系,当符号左右两边布尔值都是true时,结果才能为true。否则,为false。
    • | 和 || :表示"或"关系,当符号两边布尔值有一边为true时,结果为true。当两边都为false时,结果为false
    • ! :表示"非"关系,当变量布尔值为true时,结果为false。当变量布尔值为false时,结果为true。
    • ^ :当符号左右两边布尔值不同时,结果为true。当两边布尔值相同时,结果为false。
      • 理解:异或,追求的是“异”!
  • 逻辑运算符用于连接布尔型表达式,在Java中不可以写成 3 < x < 6,应该写成x > 3 & x < 6 。

  • 区分“&”和“&&”:

    • 相同点:如果符号左边是true,则二者都执行符号右边的操作
    • 不同点:& : 如果符号左边是false,则继续执行符号右边的操作

    ​ && :如果符号左边是false,则不再继续执行符号右边的操作

    • 建议:开发中,推荐使用 &&
  • 区分“|”和“||”:

    • 相同点:如果符号左边是false,则二者都执行符号右边的操作

    • 不同点:| : 如果符号左边是true,则继续执行符号右边的操作

    ​ || :如果符号左边是true,则不再继续执行符号右边的操作

    • 建议:开发中,推荐使用 ||

7.5 位运算符

  • 基本语法
    变量与运算符_第12张图片
  • 位运算符的运算过程都是基于二进制的补码运算

(1)左移:<<

运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)

【注意】当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

3<<4  类似于  3*24次幂 => 3*16 => 48

变量与运算符_第13张图片

-3<<4  类似于  -3*24次幂 => -3*16 => -48

变量与运算符_第14张图片
(2)右移:>>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)

【注意】如果不能整除,向下取整

69>>4  类似于  69/24= 69/16 =4

变量与运算符_第15张图片

-69>>4  类似于  -69/24= -69/16 = -5

变量与运算符_第16张图片
(3)无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)

 69>>>4  类似于  69/24= 69/16 =4

变量与运算符_第17张图片

-69>>>4   结果:268435451

变量与运算符_第18张图片
(4)按位与:&

运算规则:对应位都是1才为1,否则为0。

  • 1 & 1 结果为1

  • 1 & 0 结果为0

  • 0 & 1 结果为0

  • 0 & 0 结果为0

9 & 7 = 1

变量与运算符_第19张图片

-9 & 7 = 7

变量与运算符_第20张图片
(5)按位或:|

运算规则:对应位只要有1即为1,否则为0。

  • 1 | 1 结果为1
  • 1 | 0 结果为1
  • 0 | 1 结果为1
  • 0 & 0 结果为0
9 | 7  //结果: 15

变量与运算符_第21张图片

-9 | 7 //结果: -9

变量与运算符_第22张图片
(6)按位异或:^

运算规则:对应位一个为1一个为0,才为1,否则为0。

  • 1 ^ 1 结果为0

  • 1 ^ 0 结果为1

  • 0 ^ 1 结果为1

  • 0 ^ 0 结果为0

9 ^ 7  //结果为14

变量与运算符_第23张图片

-9 ^ 7 //结果为-16

变量与运算符_第24张图片
(7)按位取反:~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1。

  • ~0就是1
  • ~1就是0
~9  //结果:-10

变量与运算符_第25张图片

~-9  //结果:8

变量与运算符_第26张图片

7.6 条件运算符(三元运算符)

基本语法

  • 条件运算符格式:
(条件表达式)? 表达式1:表达式2
  • 说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式2

变量与运算符_第27张图片

  • 如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
    int i = (1==2 ? 100 : 200);
    System.out.println(i);//200

    boolean marry = false;
	System.out.println(marry ? "已婚" : "未婚"  );
    
    double d1 = (m1 > m2)? 1 : 2.0;
	System.out.println(d1);
    
    int num = 12;
    System.out.println(num > 0? true : "num非正数");

条件运算符与if-else的转换关系

凡是可以使用条件运算符的地方,都可以改写为if-else结构。反之,不成立。

  • 开发中,如果既可以使用条件运算符,又可以使用if-else,推荐使用条件运算符。因为执行效率稍高。

7.7 运算符优先级

优先级 运算符说明 Java运算符
1 括号 ()、[]、{}
2 正负号 +、-
3 单元运算符 ++、–、~、!
4 乘法、除法、求余 *、/、%
5 加法、减法 +、-
6 移位运算符 <<、>>、>>>
7 关系运算符 <、<=、>=、>、instanceof
8 等价运算符 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 条件与 &&
13 条件或 ||
14 三元运算符 ? :
15 赋值运算符 =、+=、-=、*=、/=、%=
16 位赋值运算符 &=、|=、<<=、>>=、>>>=

开发建议:

  1. 不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。
  2. 不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。例如:
    ​ (num1 + num2) * 2 > num3 && num2 > num3 ? num3 : num1 + num2;

八.关于字符集

8.1 字符集

  • 编码与解码

计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码 。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

  • 字符编码(Character Encoding) : 就是一套自然语言的字符与二进制数之间的对应规则。
  • 字符集:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

8.2 ASCII码

  • ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码):上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码。
  • ASCII码用于显示现代英语,主要包括控制字符(回车键、退格、换行键等)和可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
  • 基本的ASCII字符集,使用7位(bits)表示一个字符(最前面的1位统一规定为0),共128个字符。比如:空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。
  • 缺点:不能表示所有字符。
    变量与运算符_第28张图片

8.3 ISO-8859-1字符集

  • 拉丁码表,别名Latin-1,用于显示欧洲使用的语言,包括荷兰语、德语、意大利语、葡萄牙语等
  • ISO-8859-1使用单字节编码,兼容ASCII编码。

8.4 GBxxx字符集

  • GB就是国标的意思,是为了显示中文而设计的一套字符集。
  • GB2312:简体中文码表。一个小于127的字符的意义与原来相同,即向下兼容ASCII码。但两个大于127的字符连在一起时,就表示一个汉字,这样大约可以组合了包含7000多个简体汉字,此外数学符号、罗马希腊的字母、日文的假名们都编进去了,这就是常说的"全角"字符,而原来在127号以下的那些符号就叫"半角"字符了。
  • GBK:最常用的中文码表。是在GB2312标准基础上的扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312标准,同时支持繁体汉字以及日韩汉字等。
  • GB18030:最新的中文码表。收录汉字70244个,采用多字节编码,每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字,同时支持繁体汉字以及日韩汉字等。

8.5 Unicode码

  • Unicode编码为表达任意语言的任意字符而设计,也称为统一码、标准万国码。Unicode 将世界上所有的文字用2个字节统一进行编码,为每个字符设定唯一的二进制编码,以满足跨语言、跨平台进行文本处理的要求。
  • Unicode 的缺点:这里有三个问题:
    • 第一,英文字母只用一个字节表示就够了,如果用更多的字节存储是极大的浪费
    • 第二,如何才能区别Unicode和ASCII?计算机怎么知道两个字节表示一个符号,而不是分别表示两个符号呢?
    • 第三,如果和GBK等双字节编码方式一样,用最高位是1或0表示两个字节和一个字节,就少了很多值无法用于表示字符,不够表示所有字符
  • Unicode在很长一段时间内无法推广,直到互联网的出现,为解决Unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现。具体来说,有三种编码方案,UTF-8、UTF-16和UTF-32。

8.6 UTF-8

  • Unicode是字符集,UTF-8、UTF-16、UTF-32是三种将数字转换到程序数据的编码方案。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。其中,UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
  • 互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。所以,我们开发Web应用,也要使用UTF-8编码。UTF-8 是一种变长的编码方式。它可以使用 1-4 个字节表示一个符号它使用一至四个字节为每个字符编码,编码规则:
    1. 128个US-ASCII字符,只需一个字节编码。
    2. 拉丁文等字符,需要二个字节编码。
    3. 大部分常用字(含中文),使用三个字节编码。
    4. 其他极少使用的Unicode辅助字符,使用四字节编码。

(来源:尚硅谷-宋红康)

你可能感兴趣的:(Java基础,java,开发语言,jvm)