java基础:String类的基本特点及常用方法

String类的基本特点

一、String类简介

String类,顾名思义,它是一个类,是一个引用数据类型(见下图)。既然是类,就有自己的方法(普通方法和构造方法)。
在这里插入图片描述
二、String类的两种实例化方式

  1. 直接赋值实例化对象(一般用该方法
String str="Hello";
  1. 通过String类的构造方法实例化
String str=new String("Hello");
  1. 两种实例化的区别 (见下图直观解释)
    在这里插入图片描述
  • 直接赋值实例化:String str=“Hello”;
    String类的设计使用了一个共享设计模式。
    在JVM底层实际上会自动维护一个对象池,使用直接赋值的方法进行对象实例化时,该实例化对象会自动保存在这个对象池中,若下次直接使用了直接赋值的方法进行了对象实例化,如果此时对象池中有指定的内容,那么将直接进行引用,若没有,则开辟新的字符串对象放在对象池中,供下次使用(所谓对象池就是一个对象数组)。

  • 通过String类的构造方法进行实例化String str=new String(“Hello”);
    虽然这种做法属于标准做法,但是它有不足之处。
    使用构造方法进行实例化,会开辟两块堆内存,并且其中一块会成为垃圾;如果想让该方法实现第一种直接赋值实例化方法的优点,就要进行人工入池

String str=new String("Hello").intern();//手动入池方法intern()

面试题:解释String类对象的两种实例化方式的区别

  • 直接赋值:只会开辟一块堆内存,并且该字符串对象可以保存在对象池中供下次使用,一般采用该方法;
  • 构造方法实例化:会开辟两块堆内存,其中一块成为垃圾,不会自动入池,要人工入池。

三、String类的字符串比较

比如两个int型变量,判断相等,用“==”完成,但是如果用其判断字符串相等,则是判断的字符串地址的数值是否相等。若比较字符串是否相等要用String类提供的equals()方法:public boolean equals(String str);

String str1="hello";
String str2=new String("hello");
System.out.println("hello".equals(str2));

面试题:解释String类中“==”和equals()方法的区别

  • “==”: 是数值比较,比较的是两个字符串地址的数值;
  • equals():字符串内容的比较。

四、字符串常量不可变更

先来看一个栗子:

String str="Hello";
str+="world";
str+="!!!";
System.out.println(str);//此时str=Hello world !!!

以上字符串的变更是字符串对象的变更,而不是字符串内容的变更。(见下图解释)
在这里插入图片描述
字符串没有发生改变,而是字符串引用一直在发生改变,并且会产生大量的垃圾,所以在开发过程中,避免此类代码出现,即字符串不适合频繁修改。

总结

  • 字符串的创建就采用直接赋值的方法完成
  • 字符串的比较就使用equals()方法完成
  • 字符串不要改变太频繁

String类的常用方法

五、String类的常用方法 (在文档中都可以查到)

  1. 字符串与字符数组
    字符串就是一个字符数组,String类中有相应的方法支持两者的相互转换。
方法名称 描述
public String (char[] value) 将字符数组中的所有内容变为字符串
public String (char[] value, int offset, int count) 将部分字符数组中的内容变为字符串
public char charAt(int index) 取得指定索引位置的字符,索引从0开始
public char[] toCharArray() 将字符串变为字符数组返回
  1. 字节与字符串
    字节更多用于数据传输及编码转换处理中,String类中有相应的方法支持两者的相互转换。
方法名称 描述
public String (byte[] bytes) 将字节数组变为字符串
public String (byte[] bytes,int offset, int length) 将部分字节数组变为字符串
public byte[] getBytes() 将字符串以字节数组的形式返回
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 编码转换处理
  1. 字符串比较
    之前的equals()方法是区分大小写的判断,除此之外,还有以下几种:
方法名称 描述
public boolean equals(string anObject) 区分大小写比较
public boolean equalsIgnoreCase(String anotherString) 不区分大小写比较
public int compareTo(String anotherString) 比较两个字符串大小关系
  1. 字符串查找
方法名称 描述
public boolean contains(String s) 判断一个字符串是否存在
public int indexOf(String str) 从头开始查找指定字符串的位置,查到后返回位置开始索引,没查到返回-1
public int indexOf(String str,int fromIndex) 从指定位置开始查找字符串的位置
public int lastIndexOf(String str) 从后向前开始查找字符串的位置
public int lastIndexOf(String str,int fromIndex) 从指定位置从后向前查找
public boolean startsWith(String prefix) 从头判断是否以指定字符串开头
public boolean startsWith(String prefix,int offset) 从指定位置开始判断是否以指定字符串开头
public boolean endsWith(String suffix) 判断是否以指定的字符串结尾
  1. 字符串替换
    使用新的字符串替换已有的字符串数据。
方法名称 描述
public String replaceAll(String regex,String reolacement) 替换所有内容
public String replaceFirst(String regex, String replacement) 替换首个内容
  1. 字符串拆分
    将一个完整的字符串按指定的分隔符划分为若干个字符串。
方法名称 描述
public String[] split(String regex) 将字符串全部拆分
public String[] split(String regex,int limit) 将字符串部分拆分,该数组长度就是limit极限(数组最大长度)
  1. 字符串截取
    从一个完整的字符串中截取部分内容。
方法名称 描述
public String substring(int beginIndex) 从指定索引截取到结尾
public String substring(int beginIndex,int endIndex) 截取部分内容
  1. 字符串其他操作方法
方法名称 描述
public String trim() 去掉字符串中的左右空格
public String toUpperCase() 字符串转大写
public String toLowerCase() 字符串转小写
public String intern() 字符串入对象池
public String concat(String str) 字符串连接,等同于“+”号
public int length() 取得字符串长度
public bollean isEmpty() 判断是否为空字符串

<具体方法内容查文档里都有。>

  1. 字符串首字母大写
    注:在String类中唯一的遗憾就是没有提供首字母大写的操作,需要自己实现。
public class Demo{
    public static void main(String[] args) { 
    	String name ="tom";
    	System.out.println(initcap(name));
    	}
    public static String initcap(String str) {
    	if (str==null || " ".equals(str)) {
    		return str;
    	}
    	if (str.length()>1) {
    		return str.substring(0, 1).toUpperCase()+str.substring(1);
    	}
    	return str.toUpperCase();
    }
 }

(OMG终于写完了!欢迎批评指正!orz)

猜你喜欢

转载自blog.csdn.net/weixin_41550144/article/details/86555895
今日推荐