
Java.常用类.String


发布日期:2021-05-07 02:46:25
浏览次数:19
分类:技术文章
本文共 5354 字,大约阅读时间需要 17 分钟。
常用类.String
一、基本知识
java.lang.String;是字符串类型的
1.字符串一旦创建不可再改变。“abc”字符串对象一旦创建,不可再改成“abcd”。
2.提升字符串的访问效率: 在程序中使用了“缓存”技术。即用""括起来的字符串都会在"字符串常量池"中创建一份 。字符串常量池在方法区内存被存储。
3.在程序执行过程中,如果程序用到某个字符串,例如"abc"。name程序会在常量池中去搜索该字符串 ,如果未找到就在字符串常量池中新建一个abc字符串,有的话就直接拿来用。 (字符串常量池是一个缓存区,为了提高访问字符串的效率)**
public class StringTesrt01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //s1是一个引用,指向的是“abc” String s1 = "abc"; //s1只是局部变量,在未有final修饰时,可以指向新的字符串 //但是"abc""def"两个字符串一经创建后就会进入缓存区,不可更改 s1 = "def"; String s2 = "hello"; //在字符串常量池中新建 String s3 = "hello"; //直接从常量池中那来用,内存地址一样 System.out.println(s2==s3); //这里比较的仅是内存地址 true System.out.println(s2.equals(s3)); //true //== 两边如果是引用类型,则比较内存地址,地址相同为true,不同为false // 所以 Object中的equals方法 比较的是两者的内存地址 // Object中的equals方法设计目的:比较两个对象是否一致 String s4 = new String("abc"); String s5 = new String("abc"); System.out.println(s4==s5); //创建了两个不同的对象,内存地址不一样 false System.out.println(s4.equals(s5)); //true Object类中的equals比较的是内存地址,本该是false //但是String类中重写了equals方法,比较的是内容。 //以下程序会建立3个字符串对象 String s6 = "aaa"; String s7 = "bbb"; String s8 = s6+s7; }}truetruefalsetrue
4.对于两种方式的比较:
String s1 = “abc”; //只会在字符串常量池中创建新的"abc"对象String s2 = new String("abc"); //若字符串常量池中未存在,将会新建对象,并且关键的是还会在堆内存的对象内再次创建一个对象
例如:
String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("world");
该方法创建了一共有5个新的对象: 堆内存 — 3个 (hello、hello、world) 字符串常量池 — 2个 (hello、world)
5.使用String时,我们应当尽量不要做字符串的拼接操作。因为字符串一旦创建不可更改,如果频繁的拼接,会导致字符串常量池中连续地创建新的字符串对象,一来浪费空间,二来会给垃圾回收器带来问题。
二、String常用方法
String类常用的构造方法
public class StringTest02 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //1. String s1 = "abc"; //2. String s2 = new String("abc"); //3. byte[] bytes = { 97,98,99,100}; String s3 = new String(bytes); System.out.println(s3); //从结果可以看出String重写了Object的toString方法 //4. String s4 = new String(bytes,1,2); System.out.println(s4); //5. char[] c1 = { '我','是','中','国','人','武','汉','加','油'}; String s5 = new String(c1); System.out.println(s5); //6. String s6 = new String(c1,5,4); System.out.println(s6); }}abcdbc我是中国人武汉加油武汉加油
以下是jdk帮助文档中的一些相关内容:





字符串常用方法
public class StringTest03 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //1.char charAt(int index); //返回指定所引出的一个char值 char c1 = "asfdaf".charAt(4); System.out.println(c1); //c String s1 = "我是猪"; char c2 = s1.charAt(2); System.out.println(c2); //猪 //2.boolean endsWith(String endStr); System.out.println("helloWorld.java".endsWith(".java")); //true //3.boolean equalsIgnoreCase(String anotherString); //比较字符串是否相等,并且忽略大小写 System.out.println("abc".equalsIgnoreCase("ABC")); //true //4.byte[] getBytes() //使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 byte[] bytes = "abc".getBytes(); for(int i = 0; i < bytes.length; i++){ System.out.println(bytes[i]); // 97 98 99 } //5.int indexOf(int ch) //返回指定字符第一次出现的字符串内的索引。 空格也占一个字节 System.out.println("I love you forever!".indexOf("forever")); //11 //6.int indexOf(int ch, int fromIndex) //返回指定字符第一次出现的字符串内的索引,以指定的索引开始往后搜索。 System.out.println("javaScript.java".indexOf("java", 2)); //11 //7.int lastIndexOf(String str) //返回指定子字符串最后一次出现的字符串中的索引。 System.out.println("javaScript.java".lastIndexOf("java")); //11 //8.int lastIndexOf(String str, int fromIndex) //返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始往前搜索。 System.out.println("javaScript.java".lastIndexOf("java", 14)); //11 //9.String replaceAll(String regex, String replacement) //用给定的替换替换与给定的 regular expression匹配的此字符串的每个子字符串。 //该部分共创建4个字符串对象 System.out.println("javaScript.java".replaceAll("java", "mysql")); //mysqlScript.mysql //10.String[] split(String regex) //将此字符串分割为给定的 regular expression的匹配。 String myTime = "2020-02-20"; String[] ymd = myTime.split("-"); for(int i = 0; i < ymd.length; i++){ System.out.print(ymd[i]+" "); //2020 02 20 } //11.boolean startsWith(String prefix) //测试此字符串是否以指定的前缀开头。 System.out.println("/helloWorld.java".startsWith("/")); //true //12.String substring(int beginIndex) //返回一个字符串,该字符串是此字符串的子字符串。 截取字符串 System.out.println("/helloWorld.java".substring(6)); //World.java //13.String substring(int beginIndex, int endIndex) //返回一个字符串,该字符串是此字符串的子字符串 到endIndex-1处 System.out.println("/helloWorld.java".substring(6,11)); //World //14.char[] toCharArray() //将此字符串转换为新的字符数组。 char[] c3 = "我是赵宇轩".toCharArray(); for(int i = 0; i < c3.length; i++){ System.out.print(c3[i]+" "); //我 是 赵 宇 轩 } //15.String toUpperCase() //将所有在此字符 String使用默认语言环境的规则大写。 System.out.println("abcdef".toUpperCase()); //ABCDEF //16.String toLowerCase() //将所有在此字符 String使用默认语言环境的规则,以小写。 System.out.println("ABCDEF".toLowerCase()); //abcdef //17.String trim() //返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 (中间不删除) System.out.println(" I love you forever! ".trim()); //I love you forever! //18.static String valueOf(Object obj) //返回 Object参数的字符串 Object形式。 Object o = null; System.out.println(o); //null 不出现空指针异常,因为String.valueof(Object)这个方法对空值进行重写了! System.out.println(String.valueOf(o));//null //System.out.println(o.toString()); 会出现空指针异常 }}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月04日 16时33分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
软件架构-zookeeper快速入门
2019-03-04
软件架构-zookeeper场景和实现
2019-03-04
「初级篇」跟我一起学docker(四)--容器的基本操作
2019-03-04
22 岁毕业做程序员的「普通」人,50 岁时的人生轨迹是怎样的?
2019-03-04
scala上界与下界、协变与逆变
2019-03-04
java稀疏数组
2019-03-04
全球数字货币加快研发
2019-03-04
数字化助力金融科技,实现产业良性循环
2019-03-04
2020-11-23(彻底理解KMP)
2019-03-04
常用的IDC函数
2019-03-04
BUUCTF 新年快乐 内涵的软件 Java逆向解密 刮开有奖
2019-03-04
angr学习笔记(7)(malloc地址单元符号化)
2019-03-04
angr学习笔记(9)(添加约束)
2019-03-04
angr学习笔记(13)(static_binary)
2019-03-04
windows环境利用start命令实现微信多开
2019-03-04
「CF149D」括号涂色 区间DP好题
2019-03-04
树状数组 模板总结
2019-03-04
「NOI2015」程序自动分析 并查集题解
2019-03-04
[JSOI2008]Blue Mary的战役地图 Hash题解
2019-03-04
Ubuntu修改终端上显示的用户名和主机名(详细步骤)
2019-03-04