1.常用方法

1)判断字符串是否为空

  public boolean isEmpty()

2)获取字符串长度
public int length()

3)截取子子串
public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)
4)在字符串中查找字符或子字符串,返回第一个找到的索引位置,没找到返回-1
public int indexOf(int ch)
public int indexOf(String str)
5)从后面查找字符或子字符串,返回从后面数的第一个索引位置,没找到返回-1
public int lastIndexOf(int ch)
public int lastIndexOf(String str)
6)判断字符串中是否包含指定的字符序列。
public boolean contains(CharSequence s)  
7)判断字符串是否以给定子字符串开头
public boolean startsWith(String prefix)
8)判断字符串是否以给定子字符串结尾
public boolean endsWith(String suffix)
9)与其他字符串比较,看内容是否相同
public boolean equals(Object anObject)

10)忽略大小写,与其他字符串进行比较,看内容是否相同
public boolean equalsIgnoreCase(String anotherString)
11)所有字符转换为大写字符,返回新字符串,原字符串不变

12)所有字符转换为小写字符,返回新字符串,原字符串不变

13)字符串连接,返回当前字符串和参数字符串合并后的字符串,原字符串不变
public String concat(String str)
14)字符串替换,替换单个字符,返回新字符串,原字符串不变
public String replace(char oldChar, char newChar)
15)删掉开头和结尾的空格,返回新字符串,原字符串不变
public String trim() 

16)分隔字符串,返回分隔后的子字符串数组,原字符串不变
public String[] split(String regex)

2.String类的常用方法

不可变性

与包装类类似,String类也是不可变类,即对象一旦创建,就没有办法修改了。String类也声明为了final,不能被继承,内部char数组value也是final的,初始化后就不能再变了。

String类中提供了很多看似修改的方法,其实是通过创建新的String对象来实现的,原来的String对象不会被修改。比如说,我们来看concat()方法的代码

Java中的字符串常量是非常特殊的,除了可以直接赋值给String变量外,它自己就像一个String类型的对象一样,可以直接调用String的各种方法。我们来看代码:

System.out.println("老马说编程".length());
System.out.println("老马说编程".contains("老马"));
System.out.println("老马说编程".indexOf("编程"));

实际上,这些常量就是String类型的对象,在内存中,它们被放在一个共享的地方,这个地方称为字符串常量池,它保存所有的常量字符串,每个常量只会保存一份,被所有使用者共享。当通过常量的形式使用一个字符串的时候,使用的就是常量池中的那个对应的String类型的对象。

比如说,我们来看代码:

String name1 = "老马说编程";
String name2 = "老马说编程";
System.out.println(name1==name2);

输出为true,为什么呢?可以认为,"老马说编程"在常量池中有一个对应的String类型的对象,我们假定名称为laoma,上面代码实际上就类似于:

String laoma = new String(new char[]{'老','马','说','编','程'});
String name1 = laoma;
String name2 = laoma;
System.out.println(name1==name2);

实际上只有一个String对象,三个变量都指向这个对象,name1==name2也就不言而喻了。

需要注意的是,如果不是通过常量直接赋值,而是通过new创建的,==就不会返回true了,看下面代码:

String name1 = new String("老马说编程");
String name2 = new String("老马说编程");
System.out.println(name1==name2);

输出为false,为什么呢?上面代码类似于:

String laoma = new String(new char[]{'老','马','说','编','程'});
String name1 = new String(laoma);
String name2 = new String(laoma);
System.out.println(name1==name2);
												

String 类相关知识的更多相关文章

  1. Java String类相关知识梳理(含字符串常量池(String Pool)知识)

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  2. [Java初探04]__字符串(String类)相关

    前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...

  3. String类基础知识

    1.String类的构造方法 (1)String(String original)  //把字符串数据封装成字符串对象 (2)String(char[] c)   //把字符数组的数据封装成字符串对象 ...

  4. 关于public static void main(String[] args)相关知识

    main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同.比如方法的名字必须是main,方法必须是public ...

  5. Java _类 相关知识

    成员变量 java对象的属性就是成员变量,其实成员变量就是指普通的变量,可以设置初始值,也可以不设置.当不设置时,会被设置为默认值.(当成员变量前面有private关键词时,说明定义了一个私有成员) ...

  6. php类相关知识----类常量,静态变量

    类常量 <?php class myuser { ;//定义的常量不带$符号,常量之前没有访问修饰符,常量之前没有修饰符号 public function monolog() { echo &q ...

  7. php类相关知识---__unset和__isset

    __unset 删除非公有属性,在外部调用unset时发生,  __isset用来检测对象属性是否设置值 <?php class coach { protected $chairfit = &q ...

  8. php类相关知识----抽象类

    <?php //抽象类存在的目的是被继承,而不是用来被实现 abstract class wenwajiao { //抽象类中一定要有抽象方法,而且一定要被实现 abstract public ...

  9. 浅析String类

    这是对于String类的一些总结,我将会从几个方面并且结合着字符串池等相关知识进行总结 进程如下:                1.对于String类基本知识的一些总结 2.简要介绍字符串池 3.分 ...

随机推荐

  1. poj-1410 Intersection

    计算几何的题目, 学cv的要做一下.poj 地址: http://poj.org/problem?id=1410 题意:判断一个直线段,是否与一个矩形有相交点. 解决方案: 判断矩形的每一条边是否与直 ...

  2. 2015年辽宁省赛Interesting Tree

    题目描述 Recently, Miss Huang want to receive a Tree as her birthday gift! (What a interesting person!)  ...

  3. 78 mount 挂载Linux系统外的文件。

    语法 mount [-hV] mount -a [-fFnrsvw] [-t vfstype] mount [-fnrsvw] [-o options [,...]] device | dir mou ...

  4. Beta项目冲刺 --第二天

    在几kb的上传速度中苦苦挣扎的程序员... 队伍:F4 成员:031302301 毕容甲 031302302 蔡逸轩 031302430 肖阳 031302418 黄彦宁 会议内容: 1.站立式会议照 ...

  5. MySQL修改,表结构大幅修改

    ------------------create table t_video_file_temp( video_id bigint not null comment '视频Id', file_md5 ...

  6. ubuntu 下mysql中文乱码问题解决方案

    mysql> show variables like 'character%';+--------------------------+----------------------------+ ...

  7. sed巧用,随手记

    删除文件后几行,或者前几行 方法1 都当做最后一行,来删除  for((i=1;i<4;i++)); do sed -i '$d' seq01.txt ; done  方法二 倒过来看 cat ...

  8. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  9. 系统间通信(9)——通信管理与RMI 下篇

    接上文<架构设计:系统间通信(8)--通信管理与RMI 上篇>.之前说过,JDK中的RMI框架在JDK1.1.JDK1.2.JDK1.5.JDK1.6+几个版本中做了较大的调整.以下我们讨 ...

  10. js 时间与时间戳的转换

      一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象 new Date() 来进一步获取当前的时间戳 1.var timestamp1 = Date.parse(n ...