欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

String 字符串

程序员文章站 2022-03-21 08:01:38
字符串就是用“ ”括起来的都叫字符串,属于引用类型创建字符串的三种常见方式// 方式一String str = "Hello ";// 方式二String str2 = new String("Hello ");// 方式三char[] array = {'a', 'b', 'c'};String str3 = new String (array);方式一要先看常量池有没有hello,有的话直接引用,没有的话,直接创建一个hello常量并放入常量池并引用。方式二先在堆上创建一个S...


字符串就是用“ ”括起来的都叫字符串,属于引用类型,也可以说所有的文本都是字符串

创建字符串的三种常见方式

// 方式一;直接引用字符串常量
String str = "Hello ";
// 方式二;利用构造方法实例化
String str2 = new String("Hello ");
// 方式三;利用字符数组实例化
char[] array = {'a', 'b', 'c'};
String str3 = new String (array);
方式一要先看常量池有没有hello,有的话直接引用,没有的
话,直接创建一个hello常量并放入常量池并引用。

方式二先在堆上创建一个String对象,然后引用

方式三先创建一个数组,然后将数组作为参数
还可以截取数组的一部分如下图

String 字符串

字符串的比较

1==
String 使用 == 比较并不是在比较字符串内容, 而是比较
两个引用是否是指向同一个对象

2、equals方法
Java 中要想比较字符串的内容, 必须采用String类提供的equals方法.
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
// System.out.println(str2.equals(str1)); // 或者这样写也行
// 执行结果
true

理解字符串不可变

字符串是一种不可变对象. 它的内容不可改变.
String 类的内部实现也是基于 char[] 来实现的, 但是
String 类并没有提供 set 方法之类的来修改内部的
字符数组.

那么如果实在需要修改字符串的方法

1、常见办法: 借助原字符串, 创建新的字符串
String str = "Hello";
str = "h" + str.substring(1);
System.out.println(str);

2、特殊办法: 使用 "反射" 这样的操作可以破坏封
装, 访问一个类内部的 private 成员.

String str = "Hello";
// 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的. 
Field valueField = String.class.getDeclaredField("value");
// 将这个字段的访问属性设为 true
valueField.setAccessible(true);
// 把 str 中的 value 属性获取到. 
char[] value = (char[]) valueField.get(str);
// 修改 value 的值
value[0] = 'h';
System.out.println(str);
// 执行结果
hello

关于反射

反射是面向对象编程的一种重要特性, 有些编程语言也称
为 "自省".指的是程序运行过程中, 获取/修改某个对象的
详细信息(类型信息, 属性信息等), 相当于让一个对象更
好的 "认清自己" .

为什么 String 要不可变?

1. 方便实现字符串对象池. 如果 String 可变, 那么对象
池就需要考虑何时深拷贝字符串的问题了.

2. 不可变对象是线程安全的.

3. 不可变对象更方便缓存 hash code, 作为 key 时可以更
高效的保存到 HashMap 中.

String常见的方法

String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串
String 字符串

本文地址:https://blog.csdn.net/qq_45731021/article/details/112848705

相关标签: java初阶 java