深入了解Java核心类库--String类

目录
  • 一、 简介
    • 零碎知识点
    • 字符串常量池
    • 堆在逻辑上的划分
  • 二、 创建对象
    • 2.1.1 直接引用常量区
    • 2.1.2 使用构造方法
    • 2.1.3 两种实例化方法的区别
  • 三、常用方法
  • 总结

一、 简介

零碎知识点

  • extends Object

    • implements serializable,Comparable< String >,charSequence
  • String类表示字符串,所有字符串文字都是此类的对象
  • 字符串是不变的,值在创建后无法更改
  • 对象一旦声明则不可改变,改变的只是地址,原来的字符串还是存在的,并且产生垃圾
  • 任何一个“”都为字符串对象,无赋值则为匿名对象
  • 用“+”拼接字符串尽量避免,一般用append+toString
  • StringBuilder(线程不安全)和StringBuffer(线程安全),忽略线程安全,其它都一样

由于String对象是不可变的,所以可以共享(即两个字符串一样则共享同一块内存地址)

//共享
String t1 = "123";
String t2 = "123";
System.out.ptintln(t1 == t2);//true,(== 比较的是内存地址)

字符串常量池

存在于方法区(加载代码的内存区),被所有的线程共享

堆在逻辑上的划分

堆在逻辑上被分为三部分:

新生代:存储刚创建的对象(GC询问次数最多为15次,>15则进入老年代)

老年代:垃圾回收次数超过15次(即15次之后依然存活的对象)

永久代:静态修饰的所有东西(类、方法、常量…)

每一个字符串对象的创建都会放入永久代(每次创建都先去永久代,前提:不用new,new开辟新内存)

二、 创建对象

2.1.1 直接引用常量区

String s = " ";

String str = “abc” ;

2.1.2 使用构造方法

String()

String str = new String(“abc”);

2.1.3 两种实例化方法的区别

区别

直接赋值:

只开辟一块堆内存空间,并且会自动入池,不会产生垃圾会将匿名对象“”放入对象池,下一次不同对象直接赋值时直接利用池中已经存在的匿名对象

构造方法:

在堆内存创建对象会开辟两块堆内存空间,其中一块堆内存会变成垃圾被系统回收,而且不能够自动入池,需要通过public String intern();方法进行手工入池。

三、常用方法

Modifier and Type Method Description
char charAt​(int index) 返回指定索引处的 char值。
int compareTo​(String anotherString) 按字典顺序比较两个字符串。
boolean endsWith​(String suffix) 测试此字符串是否以指定的后缀结尾。
boolean equals​(Object anObject) 将此字符串与指定的对象进行比较。
boolean equalsIgnoreCase​(String anotherString) 将此 String与另一个 String比较,忽略了大小写。
void getChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。
int indexOf​(int ch) 返回指定字符第一次出现的字符串中的索引。
int indexOf​(int ch, int fromIndex) 返回指定字符第一次出现的此字符串中的索引,从指定索引处开始搜索。
int indexOf​(String str) 返回指定子字符串第一次出现的字符串中的索引。
int indexOf​(String str, int fromIndex) 从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。
boolean isEmpty() 返回 true ,当且仅当, length()是 0 。
int lastIndexOf​(int ch) 返回指定字符最后一次出现的字符串中的索引。
int lastIndexOf​(int ch, int fromIndex) 返回指定字符最后一次出现的字符串中的索引,从指定的索引开始向后搜索。
int lastIndexOf​(String str) 返回指定子字符串最后一次出现的字符串中的索引。
int lastIndexOf​(String str, int fromIndex) 返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。
int length() 返回此字符串的长度。
String repeat​(int count) 返回一个字符串,其值为此字符串的串联重复 count次。
String replace​(CharSequence target, CharSequence replacement) 将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。
String replaceAll​(String regex, String replacement) 将给定替换的给定 regular expression匹配的此字符串的每个子字符串替换。
String replaceFirst​(String regex, String replacement) 将给定替换的给定 regular expression匹配的此字符串的第一个子字符串替换。
boolean startsWith​(String prefix) 测试此字符串是否以指定的前缀开头。
boolean startsWith​(String prefix, int toffset) 测试从指定索引开始的此字符串的子字符串是否以指定的前缀开头。
String stripLeading() 返回一个字符串,其值为此字符串,并删除了所有前导 white space 。
String stripTrailing() 返回一个字符串,其值为此字符串,并删除所有尾随 white space 。
CharSequence subSequence​(int beginIndex, int endIndex) 返回作为此序列的子序列的字符序列。
String substring​(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。
String substring​(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。
char[] toCharArray() 将此字符串转换为新的字符数组。
String toLowerCase() 使用默认语言环境的规则将此 String所有字符转换为小写。
String toUpperCase() 使用默认语言环境的规则将此 String所有字符转换为大写。
String toUpperCase​(Locale locale) 使用给定 Locale的规则将此 String所有字符转换为大写。
static String valueOf​(T i) 返回T参数的字符串表示形式。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 深入理解java.lang.String类的不可变性

    1. 字符串 String 的不可变性 什么是不可变类? 这样理解:         一个对象在创建完成后,不能去改变它的状态,不能改变它的成员变量(如果成员变量包含基本数据类型,那么这个基本数据类型的值不能改变:如果包含引用类型,那么这个引用类型的变量不能指向别的对象) 不可变类只是其实例不能被修改的类.每个实例中包含的所有信息都必须在创建该实例的时候就提供,并且在对象的整个生命周期内固定不变.为了使类不可变,要遵循下面五条规则: 不要提供任何会修改对象状态的方法 保证类不会被扩展. 一般的做

  • java新手入门——String类详解

    目录 一.创建字符串 1. 直接赋值(常用) 2. new String 3. 字符数组转String 4.String类中两种对象实例化的区别 二.字符串比较相等 1.直接比较字符串 2.字符串在内存中的存储 3.字符串常量池 4.字符串比较equals 5.理解字符串的不可变 6.手动入池 intern() 1.字符转字符串 2.字符串转字符 3.字节与字符串 4.编码方式 5.小结 四.字符串常见操作 1.字符串比较 2.字符串查找 3.字符串替换 4.字符串拆分 5.字符串截取 五.St

  • Java基础入门语法--String类

    今天带大家了解一下java的基础法语---String 字符串是我们以后工作中非常常用到的类型. 使用起来都非常简单方便, 我们一定要使用熟练. 那么C语言中是否有字符串类型? 答案是 " 没有 " !! char *p = " hello"; 那么p 的类型是一个字符串类型么? 不是,p是一个指针!! 而在 Java当中 是有 字符串类型的--String 一.定义方式 创建字符串的方式有很多种,常见的构造 String 的方式如以下: 方式一:直接赋值法 Str

  • 详解Java String类常用方法有哪些

    一.构造器 实质是给底层的char数组value赋值 String s1 = new String(); String s2 = new String("abc"); String s3 = new String(new char[]{'a','b','c'}); 二.方法 str.length() 字符串长度本质是底层的char数组的长度 str.isEmpty() 本质是判断底层char数组长度是否为0 str.charAt(i) 本质是取底层char数组的第i个元素(字符) st

  • Java String类用法详解

    一.简介 零碎知识点 extends Object implements serializable,Comparable< String >,charSequence String类表示字符串,所有字符串文字都是此类的对象 字符串是不变的,值在创建后无法更改 对象一旦声明则不可改变,改变的只是地址,原来的字符串还是存在的,并且产生垃圾 任何一个""都为字符串对象,无赋值则为匿名对象 用"+"拼接字符串尽量避免,一般用append+toString Str

  • 深入了解Java核心类库--String类

    目录 一. 简介 零碎知识点 字符串常量池 堆在逻辑上的划分 二. 创建对象 2.1.1 直接引用常量区 2.1.2 使用构造方法 2.1.3 两种实例化方法的区别 三.常用方法 总结 一. 简介 零碎知识点 extends Object implements serializable,Comparable< String >,charSequence String类表示字符串,所有字符串文字都是此类的对象 字符串是不变的,值在创建后无法更改 对象一旦声明则不可改变,改变的只是地址,原来的字符

  • 深入了解Java核心类库--Math类

    目录 Java常用类库Math 一.Field Summary 二.Method Summary 2.1 常用方法 2.1.1 部分方法源码 2.2 算数运算 2.3 三角函数 2.4 其他不常用方法 总结 Java常用类库Math 类Math包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数 一.Field Summary Modifier and Type Field Description static double E 自然对数的基数 static double PI

  • 深入了解Java核心类库--Arrays类

    目录 Java常用类库Arrays 一.常用方法 1.1 toString 1.2 Sort 1.2.1 sort​(T[] a, int fromIndex, int toIndex) 1.2.2 Sort(T[] a) 1.2.3 其它 1.3 copyOf 1.4 mismatch 1.5 binarySearch 1.5.1 binarySearch​(T[] a, int fromIndex, int toIndex, T key) 1.5.2 binarySearch​(T[] a,

  • 深入了解Java核心类库--Objects类

    目录 1 Objects 1.1 Objects方法 1.2 Objects常用方法 1.2.1 equals(Object a, Object b) 1.2.2 isNull(Object obj) 1.2.3 nonNull(Object obj) 1.2.4 requireNonNull(T obj) 1.3 Objects源码 2 区别于Object 2.1 Object构造方法 2.2 Object其他方法 2.2.1 equals(Object obj) 2.2.2 toString

  • java实现利用String类的简单方法读取xml文件中某个标签中的内容

    1.利用String类提供的indexOf()和substring()快速的获得某个文件中的特定内容 public static void main(String[] args) { // 测试某个词出现的位置 String reqMessage = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + "<in>" + "<head&g

  • java字符串格式化(String类format方法)

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. format()方法有两种重载形式. 显示不同转换符实现不同数据类型到字符串的转换,如图所示: 测试用例: public static void main(String[] args) { String str=null; str=String.format("Hi,%s", "王力"); System.out.println(str); str=String.fo

  • Java详细分析String类与StringBuffer和StringBuilder的使用方法

    目录 String类基本概念 String字符串的存储原理 String类的常用构造方法 String类中常用方法 StringBuffer类 StringBuilder类 String类基本概念 String类属于引用数据类型,不属于基本数据类型. 在Java中只要是" "(双引号)中的,都是String对象. java中规定,双引号中的字符串是不可变的,也就是说"abc"自出生到死亡都不可能变成"abcd",也不能变成"ab&quo

  • Java深入浅出讲解String类常见方法

    目录 1.定义字符串 2.字符串的存储 3.String中常用的方法 3.1字符串的比较 3.2查找字符串 3.3转换字符串 4.StringBuilder和StringBuffer 5.常量池 1.定义字符串 字符串常见的构造方式如下: String s1 = "with"; String s2 = new String("with"); char[] array = {'w','i','t','h'}; String s3 = new String(array)

  • Java基础之String类使用与字符串比较

    目录 一.String类概述 二.String类的特点 三.String类的构造方法 四.创建字符串对象两种方式的区别 五.字符串的比较 六.用户登录案例 一.String类概述 String类代表字符串,java程序中的所有字符串文字(例如"abc")都被实现为此类的实例.也就是说,java程序中所有的双引号字符串,都是String类的对象. String类在java.lang包下,所有使用的时候不需要导包! 二.String类的特点 字符串不可变,它们的值在创建后不能被更改 虽然S

随机推荐