java之String

35 阅读2分钟

String创建方式

字面量方式

  1. 通过字面量方式创建的String存储在方法区,String直接指向方法区的地址
  2. 只在方法区开辟了一块空间用于存储字符串常量
String ss3 = "你好";

new方式

  1. 通过new创建的String存储在堆空间,String指向堆空间的地址,String的value属性指向方法区地址
  2. 在堆开辟一块空间存储String对象
  3. 在方法区开辟了一块空间用于存储字符串常量
  4. 堆空间对象的value属性指向方法区字符串常量的空间地址
String ss4 = new String("中国");

String拼接注意事项

  1. 常量与常量的拼接发生在常量池中,相当于使用字面量方式创建String
  2. 常量与变量,变量与变量的拼接发生在堆空间,也就是相当于new方式创建了String
final String ss5 = "Hello";
String ss6 = "World";
String ss7 = "HelloWorld";
String ss8 = "Hello" + "World";
String ss9 = ss5 + "World";
String ss10 = "Hello" + ss6;
String ss11 = ss5 + ss6;

System.out.println(ss7 == ss8); // true
System.out.println(ss7 == ss9); // true
System.out.println(ss7 == ss10); // false
System.out.println(ss7 == ss11); // false

String类型转换

String与基本数据类型的互转

  1. String转成基本数据类型,使用对应包装类型的parseXXX方法
  2. 注意,在转成数值类型时,字符串中包含非数字字符,会报NumberFormatException异常
  3. 基本数据类型转成字符串,可以使用String.valueOf或“+”
byte b1 = Byte.parseByte("12"); // 12
short s1 = Short.parseShort("111"); // 111
int n1 = Integer.parseInt("111"); // 111
float f1 = Float.parseFloat("11"); // 11.0f
double d1 = Double.parseDouble("11"); // 11.0
boolean b2 = Boolean.parseBoolean("11"); // false
boolean b3 = Boolean.parseBoolean("true"); // true
boolean b4 = Boolean.parseBoolean("True"); // True
String s2 = String.valueOf(true)); // "true"
String s3 = 1 + ""; // "1"

String与char[]之间的互转

  1. String可以使用toCharArray转成char[]
  2. char[]可以通过new String(charArray)转成String
char[] charArray = "中国".toCharArray(); // [中, 国]
String ss1 = new String(charArray); // "中国"

String与byte[]之间的互转

  1. String可以使用getBytes转成byte[]
  2. getBytes可以设置编码格式,默认使用“UTF-8”编码
  3. byte[]可以通过new String(byteArray)转成String
byte[] byteArray = "中国".getBytes(); // [-28, -72, -83, -27, -101, -67]
String ss2 = new String(byteArray); // "中国"

Sting常用方法

类型转换

  1. new String(int[])
  2. new String(byte[])
  3. new String(char[])
  4. new String(StringBuffer)
  5. getBytes()
  6. toCharArray()

比较两个字符串内容

  1. equals()
  2. equalsIgnoreCase()
  3. compareTo()

检测内容是否满足某些条件

  1. isEmpty()
  2. startsWith()
  3. endsWith()
  4. contains()
  5. matches()

获取指定内容下标

  1. charAt()
  2. indexOf()
  3. lastIndexOf()

字符串截取

  1. substring(int beginIndex)
  2. substring(int beginIndex, int endIndex)

字符串替换

  1. replaceAll(String regex,String replacement)
  2. replaceFirst(String regex,String replacement)

字符串分割

  1. split(String regex)
  2. split(String regex,int limit)

其他

  1. toLowerCase()
  2. toUpperCase()
  3. trim()
  4. intern() 始终返回常量池的内存地址
  • 从字符串常量池中查询当前字符串是否存在(通过equals判断)。
    • 如果存在,返回常量池中的字符串引用。
    • 如果不存在,把这个String对象引用存到常量池,然后返回这个String对象的引用。