美文网首页
1.4 字符和字符串

1.4 字符和字符串

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2021-03-09 09:22 被阅读0次

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

1. 字符

字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符:

char c1 = 'A';
char c2 = '中';

Java在内存中总是使用Unicode表示字符,所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可:

int a = 'a'; // 字母“a”的Unicodde编码是97
int b = '张'; // 汉字“张”的Unicode编码是24352

还可以直接用转义字符\u+Unicode编码来表示一个字符:

// 注意是十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013

2. 字符串

和char类型不同,字符串类型String是引用类型,我们用双引号"..."表示字符串。一个字符串可以存储0个到任意个字符。
源码中显示,String是以一个个字符的方式存储在final修饰的字符数组中。
String类型创建对象有两种方式:
-- ①通过"..."赋值:会先去常量池中查找是否存在相同的字符串,若存在,栈中引用直接指定该字符串;若不存在,在常量池中进行缓存,再将栈中引用指向它。
-- ②通过new关键字:每次new出来的都是一个新的对象,在堆中开辟空间进行存储。
jdk1.8移除了永久代,字符串常量池应该也在堆中

String s = ""; // 空字符串,包含0个字符
String s1 = "A"; // 包含一个字符
String s2 = "ABC"; // 包含3个字符
String s3 = "中文 ABC"; // 包含6个字符,其中有一个空格
  • 2.1 不可变特性
    String是引用类型,如上,s1只是一个引用,即它代表了一个指向。当s1改变时,只说明引用的指向改变了,原来的字符串还在常量池或堆中。
    public class Main {
        public static void main(String[] args) {
            String s = "hello";
            System.out.println(s); // 显示 hello
            s = "world";
            System.out.println(s); // 显示 world
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            String s = "hello";
            String t = s;
            s = "world";
            System.out.println(t); // hello
        }
    }
    
  • 2.2 空值null
    引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象。例如:
    String s1 = null; // s1是null
    String s2; // 没有赋初值值,s2也是null
    String s3 = s1; // s3也是null
    String s4 = ""; // s4指向空字符串,不是null
    
    注意要区分空值null和空字符串"",空字符串是一个有效的字符串对象,它不等于null
  • 2.3 字符串连接
    Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。例如:
    public class Main {
      public static void main(String[] args) {
          String s1 = "Hello";
          String s2 = "world";
          String s = s1 + " " + s2 + "!";
          System.out.println(s);
      }
    }
    
    如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接:
    public class Main {
        public static void main(String[] args) {
            int age = 25;
            String s = "age is " + age;
            System.out.println(s); // age is 25 
        }
    }
    
  • 2.4 多行字符串
    如果我们要表示多行字符串,使用+号连接会非常不方便:
    String s = "first line \n"
             + "second line \n"
             + "end";
    
    从Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)了。举个例子:
    public class Main {
        public static void main(String[] args) {
            String s = """
                       SELECT * FROM
                         users
                       WHERE id > 100
                       ORDER BY name DESC
                       """;
            System.out.println(s);
        }
    }
    
    注意:上述多行字符串实际上是5行,因在最后一个DESC后面还会有一个\n。如果我们不想在字符串末尾加一个\n,就需要这么写:
    String s = """ 
           SELECT * FROM
             users
           WHERE id > 100
           ORDER BY name DESC""";
    

3. 转义字符

因为字符串使用双引号"..."表示开始和结束,那如果字符串本身恰好包含一个"字符怎么表示?例如,"abc"xyz",编译器就无法判断中间的引号究竟是字符串的一部分还是表示字符串结束。这个时候,我们需要借助转义字符\

String s = "abc\"xyz"; // 包含7个字符: a, b, c, ", x, y, z

因为\是转义字符,所以,两个\表示一个\字符:

String s = "abc\\xyz"; // 包含7个字符: a, b, c, \, x, y, z

常见的转义字符包括:

  • \" 表示字符"
  • \' 表示字符'
  • \\ 表示字符\
  • \n 表示换行符
  • \r 表示回车符
  • \t 表示Tab
  • \u#### 表示一个Unicode编码的字符

例如:

String s = "ABC\n\u4e2d\u6587"; // 包含6个字符: A, B, C, 换行符, 中, 文

    1. Java的字符类型char是基本类型,字符串类型String是引用类型;
    1. 基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象;
    1. 引用类型的变量可以是空值null;
    1. 要区分空值null和空字符串""。

相关文章

  • shell字符串操作

    1.1 按照下标截取 1.2 字符串长度 1.3 字符串删除 1.4 字符串替换

  • 1.4 字符和字符串

    在Java中,字符和字符串是两个不同的类型。 1. 字符 字符类型char是基本数据类型,它是character的...

  • 面试和算法心得

    目录 第一章 字符串1.0 本章导读1.1 旋转字符串1.2 字符串包含1.3 字符串转换成整数1.4 回文判断1...

  • 1.4、字符、字符串

    //: Playground - noun: a place where people can play impo...

  • 1.4 String 字符串

    基本介绍 字符串 string 由一系列的字符组成,每个字符等于一个字节。PHP中的字符串只支持256的字符集,因...

  • copy,strong区别

    1.4 strong和copy在修饰字符串时有什么区别? 如果使用的是NSString, 则string值的更改是...

  • iOS Swift 基础类型转换相关

    1 字符串截取 1.1 提取单个字符: 1.2 截取前三个字符: 1.3 截取后三个字符: 1.4 提取多个字符:...

  • Redis基本数据结构的试用场景

    1. 字符串 1.1 缓存功能 1.2 计数 1.3 共享session 1.4 限速 2. 哈希 2.1 缓存 ...

  • C++之string

    字符串构造和赋值操作 实例 存取字符 实例 字符串拼接操作 实例 字符串查找和替换 实例 字符串比较 实例 字符串...

  • 2020-09-30字符串

    day8-字符串 字符串的操作 in 和 not in字符串1 in 字符串2 - 判断字符串1是否是字符串...

网友评论

      本文标题:1.4 字符和字符串

      本文链接:https://www.haomeiwen.com/subject/savpqltx.html