Java小白的第十五&十六课一一字符串类

字符串类&方法参数的传递

  • 1.String
    • 1.1 常见方法
    • 1.2 如何创建一个字符串
    • 面试题 String的==和equals()判断方法
    • 面试题 str1==str2为什么是true
  • 2.StringBuffer
    • 2.1概念
    • 2.2 构造方法摘要
    • 2.3 常用方法
  • 3. StringBuilder
    • 3.1概念
    • 3.2 构造函数
  • 总结

1.String

字符串是常量不能修改,且由char[]实现的数具保存

1.1 常见方法

返回值 语法
char charAt( int index) 返回指定索引处的char 值
boolean contains(CharSequance s) 当字符串中有这个字符时这回 true
boolean equals(Object object) 将字符串与指定的对象比较
int indexOf(String str) 返回指定字符串在字符串中第一次出现的索引
int length () 返回字符串长度
boolean isEmpty() 当且仅当长度是0时返回 true
boolean matches (String regex) 告知字符串是否匹配指定的正则表达式
static String valueOf(int i)返回的int参数的字符串形式
char[] toCharArray() 将此字符串转化成字符数组

1.2 如何创建一个字符串

  1. String str = "我是一个字符串";
    这种方式值保存在常量池
  2. String str = new String("我也是");
  3. String str = new String( char 字符数组);
  4. String str = new String(StringBuffer);

面试题 String的==和equals()判断方法

  1. == 判断的是两个字符串的地址是否相同

  2. equals(ObjectanObject)判断的是两个字符串的内容是否相同

面试题 str1==str2为什么是true

String str1="abc";
string str2="abc";
str1==str2; // true 因为直接赋值这种方式变量会存在常量区所内存地址是相同的

注:1:Object类的equals()方法,其实判断是地址,而不是内容。
String继承Object类,重写了equals方法,变成了判断的是字符串的内容。
注意2:关于equals()方法的代码规范:尽量使用非空对象来调用equals()方法,避免出现空指针异常

2.StringBuffer

2.1概念

线 程 安 全 的 可 变 字 符 序 列 \color{#ff0036}{线程安全的可变字符序列} 线。一个类似于String的字符串缓冲区,但能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某种方法可以改变序列长度和内容。

2.2 构造方法摘要

构造方法摘要
StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的内容

Java小白的第十五&十六课一一字符串类_第1张图片

2.3 常用方法

返回值类型 语法 用法
int capacity() 返回当前容量
char charAt(int index) 返回此序列中指定索引处的char值
StringBuffer reverse() 将此字符序列用其反转形式取代

3. StringBuilder

3.1概念

一个可变字符序列,这个类提供了兼容StringBuffer,但无法同步,非线程安全。

3.2 构造函数

构造方法摘要
StringBuild() 构造一个没有字符的字符串生成器,并设置初始长度是16
StringBuild(String str) 创造一个内容是指定字符串的字符生成器

总结

  • String的特点: 字符不可变,是一个常量,值不能被修改,每当改变一次字符串指向时,就会在内存中多创建一个对象。
  • 当使用String str = "abc"时,这个值"abc"会 存 储 在 常 量 池 中 \color{#ff0036}{存储在常量池中} ,如果数字类型的值超过-128~127这个范围就不会存在常量池中。
  • String方法中==和equals ()方法的区别
    • == 判断两个字符的内存地址是否相同
    • equals() 在string中进行重写比较的是内容
    • String继承了Object,在中的equals方法是用==实现的,因此比较的是内存地址。
    • 尽量避免用null调用方法,而导致的空指针异常
  • String的不可变性
    • 在JDK的源码中,该类是被final修饰,不可以被继承,底层用字符数组实现的,被final修饰,表示不可变的
    • 在代码中,对一个字符串变量返复使用 = 修改,每次的内有地址都不同,除非是最近出现过的值
  • String和StringBuffer和StringBuilder的区别
String StringBuffer StringBuilder
是否可变 不可变 可变 可变
线程同步安全 不同步 同步 不同步
运行效率 最慢 中等 最快
  • StringBuffer/StringBuilder和String如何相互转换
    • 用构造方法new StringBuffer/Builder(Sting)
    • toString StringBuilder/Buffer.toString()
  • StringBuffer和StringBuilder相比为什么支持线程同步
    • StringBuffer中的方法都会有Synchronized修饰。

你可能感兴趣的:(笔记,java)