String类,string类的特点

1,String类是final修饰的,不能被继承

2,String类的底层使用数组存储

JDK1.9之前:char[]value

JDK1.9之后:byte[]value

3,String类的对象不可变

(1),字符串常量池中存储字符串常量,可以共享

(2),每次修改都会产生新对象,频繁修改的话效率不高

如果涉及到大量的字符串修改操作,建议使用StringBuffer或StringBuilder

如何实现不可变的?

(1),类本身不能继承,没有子类会重写

(2),底层存储的value数组都是final修饰的

(3),底层存储的value数组私有化

(4),对外提供的所有修改字符串的方法,都返回一个新字符串对象

4,在java程序代码中任意使用“”引起来的部分都是字符串的对象

String对象的创建

1、字面常量值

String str = "hello";

2、使用构造器

String str = new String();String str = new String("hello");char[] arr = {...};String str = new String(arr);byte[] arr = {...};String str = new String(arr);//....

3、静态方法

String str = String.copyValueOf(xx);String str = String.valueOf(xx);

4、xx.toString()

Student stu = new Student(xx);String str = stu.toString();?StringBuffer s = new StringBuffer(xx);String str = s.toString();

5、和字符串的拼接+

int a = 10;String str = a + "";

10.5.3 String对象的个数

String str = "hello";//1个
String str = new String("atguigu");//2个
String s1 = "hello";//1个String s2 = "world";//1个String s3 = s1 + s2 + "java";//"java"1个,s1 + s2拼接结果1个,最后结果1个

10.5.4 String对象的拼接

1、+

(1)常量池中的字符串常量 + 常量池中的字符串常量 :结果是在常量池中

(2)变量 + xx:结果都在堆

(3)指向堆中的字符串常量 + xx:结果都在堆

(4)xx拼接结果.intern():结果都在常量池

2、concat:拼接的结果都是新的字符串,都在堆中

10.5.5 String对象的比较

1、==:比较地址

2、equals(xx):比较字符串内容,严格区分大小写

3、equalsIgnoreCase(xx):比较字符串内容,不区分大小写

4、compareTo(xx):比较字符串的大小,按照字符编码值比较,严格区分大小写

5、compareToIgnoreCase(xx):比较字符串的大小,按照字符编码值比较,不区分大小写

6、java.text.Collator:文本校对器比较大小,按照指定语言环境的自然语言顺序比较大小(字典排序)

10.5.6 空字符串与空字符串的判断

if(str !=null && str.isEmpty())if(str !=null && str.length()==0)if(str !=null && str.equals(""))if("".equals(str))

10.5.7 String类的常用API

序号 方法签名 方法功能简介
1 String() 创建空字符串
2 String(String original) 根据original创建一个新字符串
3 static String valueOf(xx value) 根据value内容创建一个字符串
4 String intern() 将字符串的内容存入常量池
5 String concat() 字符串拼接
6 boolean equals(Object obj) 判断当前字符串与指定字符串内容是否已在,严格区分大小写
7 boolean equalsIgnoreCase(String obj) 判断当前字符串与指定字符串内容是否已在,不区分大小写
8 int compareTo(String str) 比较当前字符串与指定字符串的大小,严格区分大小写
9 int compareToIgnoreCase(String str) 比较当前字符串与指定字符串的大小,不区分大小写
10 boolean isEmpty() 判断当前字符串是否为空
11 int length() 返回当前字符串的长度
12 String toLowerCase() 将当前字符串转为小写
13 String toUpperCase() 将当前字符串转为大写
14 String trim() 去掉当前字符串前后空白符
15 boolean contains(xx) 判断当前字符串中是否包含xx
16 int indexOf(xx) 在当前字符串中查找xx第一次出现的下标
17 int lastIndexOf(xx) 在当前字符串中查找xx最后一次出现的下标
18 String substring(int beginIndex) 从当前字符串的[beginIndex, 最后]截取一个子串
19 String substring(int beginIndex, int endIndex) 从当前字符串的[beginIndex, endIndex)截取一个子串
20 char charAt(index) 返回当前字符串[index]位置字符
21 char[] toCharArray() 将当前字符串的内容用一个字符数组返回
22 String(char[] value) 用value字符数组的元素构建一个新字符串
23 String(char[] value,int offset, int count) 用value字符数组的[offset]开始的count个字符构建一个新字符串
24 static String copyValueOf(char[] data) 用data字符数组的元素构建一个新字符串
25 static String copyValueOf(char[] data, int offset, int count) 用data字符数组的[offset]开始的count个字符构建一个新字符串
26 static String valueOf(char[] data) 用data字符数组的元素构建一个新字符串
27 static String valueOf(char[] data, int offset, int count) 用data字符数组的[offset]开始的count个字符构建一个新字符串
28 byte[] getBytes() 将当前字符串按照平台默认字符编码方式编码为字节序列
29 byte[] getBytes(字符编码方式) 将当前字符串按照指定字符编码方式编码为字节序列
30 String(byte[] bytes) 将bytes字节序列按照平台默认字符编码方式解码为字符串
31 String(byte[] bytes,String charsetName) 将bytes字节序列按照指定字符编码方式解码为字符串
32 boolean startsWith(xx) 判断当前字符串是否以xx开头
33 boolean endsWith(xx) 判断当前字符串是否以xx结尾
34 boolean matchs(xx) 判断当前字符串是否满足xx正则
35 String replace(xx,yy) 将当前字符串中所有xx替换为yy
36 String replaceFirst(xx,value) 将当前字符串中第一个满足xx正则的字符替换为value
37 String repalceAll(xx, value) 将当前字符串中所有满足xx正则的字符替换为value
38 String[] split(xx) 将当前字符串按照xx正则拆分为多个字符串
39 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将当前字符串的[srtBegin,srcEnd)部分字符复制到dst字符数组中,dst数组从[dstBegin]开始存储

10.7 StringBuffer和StringBuilder

10.7.1 String类与StringBuffer和StringBuilder区别

String类的对象是不可变字符序列,StringBuffer和StringBuilder的对象是可变字符序列。

StringBuffer:老点,线程安全的,因为它的方法有synchronized修饰

StringBuilder:JDK1.5之后引入的,线程不安全,单线程情况下推荐使用。

10.7.2 StringBuffer和StringBuilder的API

序号 方法签名 方法区功能简介
1 StringBuffer() 创建一个空的可变字符序列,默认长度16
2 StringBuffer(String str) 用字符串str内容创建一个可变字符序列
3 StringBuffer append(数据类型 b) 在当前字符序列后面追加b
4 StringBufferinsert(int index, 数据类型 s) 在当前字符序列[index]插入s
5 StringBuffer delete(int start, int end) 删除当前字符序列[start,end)部分字符
6 StringBuffer deleteCharAt(int index) 删除当前字符序列[index]位置字符
7 void setLength(int newLength) 修改当前字符序列的长度为newLength
8 void setCharAt(int index, char ch) 替换当前字符序列[index]位置字符为ch
9 StringBuffer reverse() 将当前字符序列内容反转
10 StringBuffer replace(int start, int end, String str) 替换当前字符序列[start,end)部分字符为str
11 int indexOf(String str) 在当前字符序列中开始查找str第一次出现的下标
12 int indexOf(String str, int fromIndex) 在当前字符序列[fromIndex]开始查找str第一次出现的下标
13 int lastIndexOf(String str) 在当前字符序列中开始查找str最后一次出现的下标
14 int lastIndexOf(String str, int fromIndex) 在当前字符序列[fromIndex]开始查找str最后一次出现的下标
15 String substring(int start) 截取当前字符序列[start,最后]部分构成一个字符串
16 String substring(int start, int end) 截取当前字符序列[start,end)部分构成一个字符串
17 String toString() 将当前可变字符序列的内容用String字符串形式表示
18 void trimToSize() 如果缓冲区大于保存当前字符序列所需的存储空间,则将重新调整其大小,以便更好地利用存储空间。
19 int length() 返回当前字符序列的长度
20 char charAt(int index) 返回当前字符序列[index]位置字符
21 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将当前字符串的[srtBegin,srcEnd)部分字符复制到dst字符数组中,dst数组从[dstBegin]开始存储

原文地址:https://www.cnblogs.com/Objecting/p/12234815.html

时间: 2024-08-28 07:38:59

String类,string类的特点的相关文章

Java从零开始(4)类String字符串

字符串是由字符组成,在Java中,字符串是对象,是描述字符的基本数据结构.String类可以用来保存一个字符串,本类是最终类,不允许继承: 1.String对象的创建 初始化 由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = “abc”; s = “Java语言”; 使用关键字new 其实按照面向对象的标准语法,其格式应该为: String s = new String(“abc”); s = new Stri

C++ 常用类 string类

===6.3.2使用string对象=== string word="I love China" *链接字符串* string description=adjective  + " " + word; _Note_: 不能连接两个字符串字面量,下面的语句是错误的 string test= "I have" + "a dream"; ===6.3.3访问字符串中的字符=== *读取字符串* getline(cin, text);

string、math类、random随机数、datetime、异常保护

今天讲的知识点比较多,比较杂,以至于现在脑子里还有点乱,慢慢来吧... string (1)string.length; (获得你string字符串的长度) (2)a = a.Trim(); 重新赋值 (3)string.Trim(); 去掉字符串前后空格 (4)string.TrimStart(); 去掉前面的空格 (5)string.TrimEnd(); 去掉后面的空格 (6) string.ToLower(); 将所有大写字母转换为小写 (7)string.ToUpper(); 将所有小写

类string解析

转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5645248.html 在涉及字符串的时候,我们可以定义字符数组或指针,其实还有一个类,专门是为字符串设计的,即类string,包含在头文件<string>中,在命名空间std中的,因此要用string类,需要使用命名空间std. 一.初始化.赋值所用 1.构造函数string():用于初始化的时候. string(); 默认构造函数 string (const string& str); 拷贝构

类string的构造函数、拷贝构造函数和析构函数

String 类的原型如下 class String{   public:          String(const char *str=NULL); //构造函数          String(const String &other); //拷贝构造函数          ~String(void); //析构函数          String& operator=(const String &other); //等号操作符重载 ShowString(); private:

android switch不能使用参数String,View等类的解决方法

基于方法:Object.hashCode(); hashCode()的原理: hash值本身是一个散列码,简而言之就是每个Object都对应了一个hash值(int),所以hashcode的作用及时全局唯一标示; 在同一运行环境下,hashcode值是唯一的,这样就可以区分在类实例在物理上不是一样的对象 但是,例如 String obj_a="aaa"; String obj_b="aaa"; obj_a,obj_b是一样的,原因是java的字符串池优化的原因,每声

编写类String 的构造函数、析构函数和赋值函数

编写类String 的构造函数.析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数private:char *m_data; // 用于保存字符串

java ——String , StringBuffer, StringBuilder类

一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==”  比较两个对象是否引用同一实例 public class StringDemo { public static void main(String args[]) { StringDemo1(); } public static void StringDemo1() { String str1="abcd"; Str

Java从零开始学三十(String和StringBuffer类)

一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作 二.StringBuffer类的常用方法 No. 方法定义 类型 描述 1 public StringBuffer() 构造 StringBuffer的构造方法 2 public StringBuffer append(char c) 方法 在StringBuffer中提供了大量的追加操作(与String中使用“

从字节码和JVM的角度解析Java核心类String的不可变特性

1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设计成不可变的好处在哪里. 为什么不推荐使用+号的方式去形成新的字符串,推荐使用StringBuilder或者StringBuffer呢. 翻阅了网上的一些博客和stackoverflow,结合自己的理解做一个汇总. 2. String类是如何实现不可变的 String类的一大特点,就是使用Final类修饰符. A class can be declared final if its