当前位置: 首页 > ops >正文

Java String类(超级详细!)

一、前言

1、String表示字符串类型,属于引用数据类型,不属于基本数据类型。

拓展:

数据类型分为基本数据类型和引用数据类型

基本数据类型值的是八大基本数据类型

引用数据类型指的是类(class)、接口(interface)、数组([])

2、在java中随便使用双引号括起来的都是String对象。

例如:

“abc”,“def”,“hello world!”,这是3个String对象。

3、java中规定,双引号括起来的字符串,是不可变的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab"

4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。

5、为什么SUN公司把字符串存储在一个“字符串常量池”当中呢?

答案:

因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。

二、实例

例一:

public class StringTest01 {public static void main(String[] args) {// 这两行代码表示底层创建了3个字符串对象,都在字符串常量池当中。String s1 = "abcdef";String s2 = "abcdef" + "xy";// 分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪里来的?// 凡是双引号括起来的都在字符串常量池中有一份。// new对象的时候一定在堆内存当中开辟空间。String s3 = new String("xy");}
}

图示:

例二:

public class StringTest02 {public static void main(String[] args) {String s1 = "hello";// "hello"是存储在方法区的字符串常量池当中// 所以这个"hello"不会新建。(因为这个对象已经存在了!)String s2 = "hello";// == 双等号比较的是变量中保存的内存地址System.out.println(s1 == s2); // trueString x = new String("xyz");String y = new String("xyz");// == 双等号比较的是变量中保存的内存地址System.out.println(x == y); //false}
}

图示:

拓展:

栈和堆的区别:

1、栈是由系统自动分配的,堆是人为申请开辟的

2、栈获得的空间较小,堆获得的空间较大

3、栈由系统自动分配速度比较快,而堆速度比较慢

4、栈是连续的空间,堆是不连续的空间

5、栈一般存放的是基本数据类型,而堆只存放对象

三、构造方法 

1、String s = “xxx”

示例:

//最常用的方式
String s1 = "我是中国人";
System.out.println(s1);//我是中果人

2、String(String original)

示例:

String s2 = new String("我是中国人");
System.out.println(s2);//我是中果人

3、String(char数组)

示例:

char[] c = {'我' , '是', '中', '果', '人'};
String s3 = new String(c);
System.out.println(s3);//我是中果人

4、String(char数组,起始下标,长度)

示例:

char[] c = {'我' , '是', '中', '果', '人'};
String s4 = new String(c, 2, 3);
System.out.println(s4);//中果人

5、String(byte数组)

示例:

byte[] b = {65, 66 ,67, 68};
String s5 = new String(b);
System.out.println(s5);//ABCD

6、String(byte数组,起始下标,长度)

示例:

byte[] b = {65, 66 ,67, 68};
String s6 = new String(b, 1, 2);
System.out.println(s6);//BC

7、String(StringBuffer buffer)

示例:

StringBuffer sb1 = new StringBuffer("我是福建人");
String s7 = new String(sb1);
System.out.println(s7);//我是福建人

8、String(StringBuilder builder)

示例:

StringBuilder sb2 = new StringBuilder("我是厦门人");
String s8 = new String(sb2);
System.out.println(s8);//我是厦门人

拓展:

Stringbuffer 和 Stringbuilder 的区别是什么?

初级答案:

Stringbuffer线程安全,Stringbuilder线程不安全。

中级答案:

你在代码中点开它们的append方法,你会看到stringbuffer的方法前面用的synchronized方法修饰的,而Stringbuilder是没有的。

这就是本质区别。一个线程安全,一个线程不安全。

高级答案:

StringBuffer是Java1.0时代加入的上古类,因为早期开发人员的判断失误,导致性能底下。

StringBuilder是Java1.5时期加入的新类,性能高,纠正了StringBuffer的错误。

架构答案:

1、StringBuffer 与 StringBuilder 两者的功能完全相等。

2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。

3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全,而StringBuffer则每次都需要判断锁,效率相对更低一般。

四、方法

1、char charAt(int index)    

返回指定位置的字符

示例:

String s1 = "hello world";
System.out.println(s1.charAt(6));//w

2、int compareTo(String anotherString)    

比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1

示例:

String s2 = "abc";
String s3 = "xyz";
String s4 = "xyz";
System.out.println(s2.compareTo(s3));//-23
System.out.println(s3.compareTo(s4));//0
System.out.println(s4.compareTo(s1));//16

3、boolean contains(CharSequence s)    

判断字符串是否包含s

示例:

System.out.println(s1.contains("s"));//false

4、boolean endsWith(String suffix)    

判断字符串是否以suffix结尾

示例:

System.out.println(s1.endsWith("world"));//true
System.out.println(s1.endsWith("t"));//false

5、boolean equals(Object anObject)    

判断两个串是否相等

示例:

System.out.println(s2.equals(s3));//false

6、boolean equalsIgnoreCase(String anotherString)    

忽略大小写判断两个串是否相等

示例:

String s5 = "HELLO worLD";
System.out.println(s1.equalsIgnoreCase(s5));//true

7、byte[] getBytes()    

将字符串串变成字节数组返回

示例:

byte[] b = s1.getBytes();
System.out.println(Arrays.toString(b));//[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

8、int indexOf(String str)    

返回str在字符串第一次出现的位置

示例:

System.out.println(s1.indexOf("world"));//6
System.out.println(s1.indexOf("h"));//0

9、boolean isEmpty()    

字符串是否为空

示例:

System.out.println(s1.isEmpty());//false

10、int length()    

字符串长度

示例:

System.out.println(s1.length());//11

11、int lastIndexOf(String str)    

返回str最后一次出现的位置

示例:

String s6 = "javapythonc++cphpjavapython";
System.out.println(s6.lastIndexOf("java"));//17
System.out.println(s6.lastIndexOf("h"));//24

12、String replace(CharSequence target, CharSequence replacement)    

用replacement替换字符串target的字符

示例:

String s7 = "name=zhangsan&age=18&sex=男";
String newS7 = s7.replace("&", ";");
System.out.println(newS7);//name=zhangsan;age=18;sex=男

13、String[] split(String regex)    

将字符串以regex分割

示例:

String[] splitS7 = s7.split("&");
System.out.println(Arrays.toString(splitS7));//[name=zhangsan, age=18, sex=男]

14、boolean startsWith(String prefix)    

判断字符串是否以prefix开始

示例:

System.out.println(s6.startsWith("java"));//true
System.out.println(s6.startsWith("python"));//false

15、String substring(int beginIndex)    

从beginIndex开始截取字串

示例:

System.out.println(s6.substring(10));//c++cphpjavapython

16、String substring(int beginIndex, int endIndex)    

截取beginIndex到endIndex - 1的字符串

示例:

System.out.println(s6.substring(10, 13));//c++

17、char[] toCharArray()    

将字符串转换乘char数组

示例:

char[] charS6 = s6.toCharArray();
System.out.println(Arrays.toString(charS6));//[j, a, v, a, p, y, t, h, o, n, c, +, +, c, p, h, p, j, a, v, a, p, y, t, h, o, n]

18、String toLowerCase()    

字符串转小写

示例:

System.out.println(s5.toLowerCase());//hello world

19、String toUpperCase()    

字符串转大写

示例:

System.out.println(s6.toUpperCase());//JAVAPYTHONC++CPHPJAVAPYTHON

20、String trim()    

去除字符串两边空格

示例:

String s8 = "           你 好 世 界                   ";
System.out.println(s8.trim());//你 好 世 界

21、static String valueOf(int i)    

将 i 转换成字符串

示例:

System.out.println(String.valueOf(123));//123
System.out.println(String.valueOf(3.14));//3.14
System.out.println(String.valueOf(true));//true
System.out.println(String.valueOf(new Object()));//java.lang.Object@4554617c
//valueOf会自动调用toString()方法
http://www.xdnf.cn/news/11789.html

相关文章:

  • linux mkfs命令参数及用法详解---linux格式化文件系统命令
  • 二叉排序树
  • 物联网应用技术综合实训室解决方案
  • 2021-03-14
  • 服务器基础知识全解(汇总版)
  • 电脑软件:键盘按键修改器——keytweak使用介绍
  • 最好的磁盘管理工具Acronis Disk Director Suite 10.0英文原版 + 注册机 + 使用图文介绍...
  • 电脑打印文件全部步骤_条码打印机的操作步骤
  • 【运维知识进阶篇】集群架构-阿里云配置HTTPS证书
  • 阅读这篇文章,彻底了解响应式网页设计
  • 取消a或input标签聚焦后出现虚线框
  • 11款相似图片搜索引擎推荐,以图搜图将不再是难事
  • TBase的入门
  • 从Java角度看区块链实践系列4:基于原理手写实现SHA-256算法以及Merkle树算法
  • mcafee 8.5杀毒软件下载、安装、配置详解教程
  • MATLAB命令大全1
  • Installshield 2008 汉化版
  • 百度seo排名点击器app_seo如何快速排名百度首页
  • mysql backup restore_mysqlbackup备份和还原
  • 卡巴斯基2013简体中文正式版
  • JavaScript基础,新手详细入门
  • 30套JSP网站源代码合集
  • google map Api接口整理
  • C语言进阶第十篇【程序的编译(预处理操作)+链接】
  • AD中 Top Solder和Top Paste
  • ADO编程-RecordSet对象
  • Java 移位操作
  • 高质量C++编程
  • 冯·诺依曼结构
  • SharePoint 2010 -- 常用技巧及方法总结