5.字符和字符串

2025-05-08  本文已影响0人  呦丶耍脾气

在Java中,字符和字符串是两个不同的类型。

字符类型

Java在内存是使用Unicode表示字符,所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。

赋值

char是基本数据类型,保存一个Unicode字符

char s1 = 'A';
char s2 = '你';
// 注意是十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4f60'; // '你',因为十六进制4f60 = 十进制20320

char类型赋值必须要有一个,char s1 = 'AB';char s1 = '';都会编译错误

获取Unicode

int s3 = 'A';//65 十六进制0041 = 十进制65
int s4 = '你';//20320 十六进制4f60 = 十进制20320

字符串类型

字符串类型String是引用类型,我们用双引号""表示字符串,一个字符串可以存储0个到任意个字符

赋值

String s = ""; // 空字符串,包含0个字符
String s1 = "A"; // 包含一个字符
String s2 = "Hello World"; // 包含11个字符,其中有一个空格
String s3 = "你好 ABC"; // 包含6个字符,其中有一个空格
String s = "ABC\n\u4e2d\u6587"; // 包含6个字符: A, B, C, 换行符, 中, 文

需要注意转义字符,转义字符只计算转义后的字符
常见的转义字符包括:
\" 表示字符"
\'表示字符'
\\ 表示字符\
\n 表示换行符
\r 表示回车符
\t 表示Tab
\u#### 表示一个Unicode编码的字符

字符串连接

使用+连接任意字符串和其他数据类型

String s1 = "Hello";
String s2 = "World";
System.out.println(s1 + " " + s2);//Hello World
String s3 = "年龄:";
String s4 = "18";
System.out.println(s3 + s4);//年龄:18

如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接

多行字符串

String s = "first line \n"
         + "second line \n"
         + "end";
String s5 = """
     first line
     second line
     end""";

多行字符串前面共同长度的空格会被去掉

不可变特性

Java的字符串除了是一个引用类型外,还有个重要特点,就是字符串不可变。

String s1 = "hello";
System.out.println(s1);//hello
s1 = "你好";
System.out.println(s1);//你好

String s1 = "hello";时,JVM虚拟机先创建字符串"hello",然后,把字符串变量s1指向它:

      s
      │
      ▼
┌───┬───────────┬───┐
│   │  "hello"  │   │
└───┴───────────┴───┘

紧接着,执行s1 = "你好";时,JVM虚拟机先创建字符串"你好",然后,把字符串变量s1指向它:

      s ──────────────┐
                      │
                      ▼
┌───┬───────────┬───┬───────────┬───┐
│   │  "hello"  │   │  "world"  │   │
└───┴───────────┴───┴───────────┴───┘

原来的字符串"hello"还在,只是我们无法通过变量s访问它而已。因此,字符串的不可变是指字符串内容不可变。

空值null

引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象。

String s1 = null; // s1是null
String s2 = s1; // s2也是null
String s3 = ""; // s3指向空字符串,不是null
上一篇 下一篇

猜你喜欢

热点阅读