4.19JavaString基础

4.19JavaString基础

特点:

  • String类又称作不可变字符序列(StringBuilder---可变字符序列)---源码当中序列就是一个数组,利用数组定义的

    • 源码中用了final关键字,所以只能初始化一次

  • String位于java.lang包中,Java程序默认导入java.lang包下的所有类

  • Java字符串就是Unicode字符序列,如:"Java" = 'J'、'a'、'v'、'a'四个Unicode字符

  • Java没有内置的字符串类型,在标准的Java类库中提供了一个预定义的类String,每个用双括号引起来的字符串都是String类的一个实例

String类的实例

String e = ""; //空字符串
String greeting = "Hello World";

Java允许使用符号"+"把两个字符串连接起来

String s1 = "Hello";
String s2 = "World!";
String s = s1 + s2;

n-符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式

n-当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后进行连接

实例:

int age = 18;
String str = "age is" + age; //str赋值为"age is 18"
//这种通性通常被用在输出语句中
System.out.println("age is" + age);

String类和常量池

(现阶段没有深入了解虚拟机底层)

常量池分类

全局字符串常量池(String Pool)

特点:

  • 存放的内容是在类加载完成后存到String Pool中

  • 每个VM中只有一份,存放的是字符串常量的引用之(在堆中生成字符串对象实例)

class文件常量池(Class Constant Pool)

特点:

  • 在编译的时候每个class都有

  • 存放的是常量(文本字符串、final常量等)和符号引用---方法区

运行时常量池(Runtime Constant Pool)

特点:

  • 在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中

  • 每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致

String基本用法:

package com.cxl;

import com.sun.xml.internal.ws.api.ha.StickyFeature;

/**
* 测试字符串的基本类型
* @author Lucifer
*/
public class TestString {
   public static void main(String[] args) {

       String str = "abc";
       String str2 = new String("defg"); //通过创建对象的方法去创建String变量
       String str3 = "abc" + "defgh"; //字符串拼接的方法创建
       String str4 = "18" + 19; //返回1819而不是37,这里的"+"号是字符串连接符不是运算符
       System.out.println(str4);

       System.out.println("########");
       String str10 = "Lucifer";
       String str11 = "Lucifer";
       String str12 = new String("Lucifer"); //因为这个是新建的一个对象,所以str11和str12不是同一个对象

       System.out.println(str10 == str11); //比较两个String变量是否是同一个对象---这个是true
       System.out.println(str11 == str12); //这个是false]
       System.out.println(str11.equals(str12)); //这个是true,因为equals是比较值而不是比较指向的对象是否一致
       /*
       分析为什么str11 == str12是false
       因为在类TestString被加载之后这些用双引号引起的字符串和拼接字符串会被拼接
       然后自动的放到常量池中---引用地址放到常量池中
       通常比较字符串都是比较值是否相等,所以比较字符串的话都是使用equals---因为比较值是否相等而不是比较地址是否相等
       (对象相同equals也会返回true---equals源码)---equals源码比较对象、比较字符
        */
  }
}

 

posted @ 2021-04-19 20:15  俊king  阅读(136)  评论(0编辑  收藏  举报