String类特点分析

发布于2020-08-21   620 次阅读


本文最后更新于2022年6月1日,已超过 1 年没更新!内容可能已失效,请自行测试。

String类简介

字符串严格意义上并不能算基本数据类型,JVM支持制造了一种可以简单使用的String类,并且可以像基本数据类型那样直接赋值处理

// String对象实例化
public class StringDemo {
  public static void main(String[] args) {
    String str = "yeyufan.cn";
    System.out.println(str);
  }
}

String类里面之所以可以保存字符串是因为定义了一个数组,每一个字符都存放在数组之中

JDK1.8以前String保存的是字符数组,JDK1.9以后保存的是字节数组

// 构造方法实例化
public class StringDemo2 {
  public static void main(String[] args) {
    String str = new String("yeyufan.cn");
    System.out.println(str);
  }
}

String本身包装的是一个数组,并且有两种对象的实例化形式:直接赋值,构造方法

字符串比较

// String相等判断
public class StringDemo3 {
  public static void main(String[] args) {
    String strA = "yeyufan";
    String strB = new String("yeyufan");
    System.out.println(strA == strB);
  }
}
// 正确的String相等判断
public class StringDemo4 {
  public static void main(String[] args) {
    String strA = "yeyufan";
    String strB = new String("yeyufan");
    System.out.println(strA.equals(strB));
  }
}

字符串常量

任何一个使用""定义的字符串常量实际上描述的是String类的匿名对象

String类对象两种实例化方式比较

直接赋值的对象实例化模式

在程序中只需将一个字符串赋值给String类的对象就可以实现对象的实例化处理

public class StringDemo5 {
  public static void main(String[] args) {
    String strA = "yeyufan";
    String strB = "yeyufan";
    System.out.println(strA == strB);
  }
}

此时比较的是内存地址,返回true.主要原因是Java底层有一个字符串池,在采用直接赋值的处理过程之中,对于字符串而言可以实现池数据的自动保存,提升操作性能

构造方法对象实例化模式

public class StringDemo6 {
  public static void main(String[] args) {
    String strA = new String("yeyufan");
    String strB = new String("yeyufan").intern();
    System.out.println(strA == strB);
  }
}

String对象常量池

对象池的主要目的是实现数据的共享处理

Java中对象(常量)实际上可分为两种

  • 静态常量池:程序加载的时候自动将此程序中保存的字符串,普通的常量类,方法全部进行分配
  • 运行时常量池:当一个程序加载后,里面的一些变量,提供的常量池
// 观察常量池
public class StringDemo7 {
  public static void main(String[] args) {
    String strA = "yeyufan.cn";
    String strB = "yeyufan" + "." + "cn";
    System.out.println(strA == strB);
  }
}
// 运行时运行时常量池
public class StringDemo8 {
  public static void main(String[] args) {
    String info = ".";
    String strA = "yeyufan.cn";
    String strB = "yeyufan" + info + "cn";
    System.out.println(strA == strB);
  }
}

字符串修改分析

String中是一个数组,数组的最大特点是长度不可改变,当设置了一个字符串,此时会自动进行空间开辟

主方法组成分析

Java中的主方法组成比较复杂

  • public:描述的是一种访问权限,主方法是一切的开始点,开始点一定是公共的
  • static:程序的执行是通过类名称调用的,所以表示此方法由类直接调用
  • void:主方法是起点,没有返回的可能
  • main:固定的定义好的方法名称
  • String args[]:字符串数组,可以实现程序启动参数的接收
=

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。