当前位置:   article > 正文

JavaSE之String类_javase string

javase string

概念

String类的实例表示一个字符串, String是一种不可变的字符串, 一旦对这个字符串做出改变的操作, 实质上是重新创建一个新的对象, 然后把引用指向这个新的对象.

常见的构造String的方式

//方式一
String str = new String("Hello");
//方式二
String str = "Hello";
  • 1
  • 2
  • 3
  • 4

问题1. 方式一在内存中创建了几个对象
答: 有可能是一个对象, 有可能是两个对象:
对于"Hello"这个字符串对象, 如果字符串常量池中存在, 那么就在堆中new String一个对象, 指向字符串常量池中的"Hello"字符串对象;
如果字符串常量池中不存在, 那么就会先在字符串常量池中创建一个"Hello"字符串, 然后再在堆中new String一个对象, 指向他.
问题2. 关于 == 问题
详见博客 https://blog.csdn.net/qq_45914985/article/details/106479978

对于== 和equals:

  • 在String中重写了equals方法, 用来判断两个变量或者实例指向同一个内存空间的值是不是相同;
  • == 是判断两个变量或者实例是不是指向同一个内存空间(如果指向同一个内存空间, 那对应的值就相同)

理解字符串的不可变性

  • String内部的实现也是基于char[]来实现的, 但是并没有提供set方法来修改内部的字符数组.

例如下面这段代码

String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str);
// 执行结果
//hello world!!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

看起来是拼接str指向的字符串为hello world!!!, 其实并不是这样; 而是str指向了一个字符串常量池中新的对象 hello world!!!

  • 为什么String要不可变(不可变的好处)
    (1) 方便实现字符串常量池. 如果String可变, 那么常量池就需要把考虑深拷贝字符串的问题了
    (2) 不可变对象是线程安全的
    (3) 不可变对象更方便缓存hash code, 作为key时可以更高效的保存到HashMap中

String API

字符串比较

在这里插入图片描述

字符串查找

在这里插入图片描述
常用的就是contains()
indexOf()需要注意的就是: 如果内容重复, 他只能返回查找的第一个位置

字符串替换

在这里插入图片描述

字符串拆分

在这里插入图片描述

字符串截取

在这里插入图片描述

其他常用操作

在这里插入图片描述

对于StringBuffer和StringBuilder

  • 因为String类的不可修改性, 为了方便字符串的修改, 又引入了StringBuffer和StringBuilder类
  • StringBuilder和StringBuffer大部分功能是相同的, 只是StringBuffer是线程安全的, StringBuilder是线程不安全的

StringBuilder中的常用方法

//创建方式:
StringBuilder sb = new StringBuilder();

//字符串拼接----append方法
//相当于String中的+的实现功能, 但是没有创建新的对象, 而是直接拼接字符串

sb.append("Hello");
sb.append("World");

//字符串反转----reverse方法
StringBuffer sb = new StringBuffer("helloworld");
System.out.println(sb.reverse());

//插入----insert方法
sb.insert(0, "Java");

//删除----deleteCharAt
sb.deleteCharAt(sb.indexOf("J"))

//String 与 StringBuilder 转换
//1. StringBuilder 通过toString() 转成String
String str = sb.toString();
System.out.println(str);
		
//2. String 转 StringBuilder 通过 StringBuilder 构造器
String ss= "i love you!!!";
StringBuilder sbb = new StringBuilder(ss);
System.out.println(sbb);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

参考文献
https://blog.csdn.net/weixin_47713805/article/details/106442451

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/802724?site
推荐阅读
相关标签
  

闽ICP备14008679号