String 相关基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013234928/article/details/89408714

String 不是基本数据类型,但是我们却经常使用,且离不开它,面试也常常出现于它相关的面试题,简单整理一下。

1> String、StringBuffer、 StringBuilder的区别

  • 从运行速度上说,StringBuilder>StringBuffer>String,因为String是不可变的对象

  • String:是字符串常量(由final修饰),StringBuffer和StringBuilder 是字符串变量

  • StringBuffer:有同步锁,但效率低,适用于多线程下字符缓冲区进行大量操作。

  • StringBuilder:效率高,线程不安全,适用于单线程下的字符缓冲区进行大量操作的情况;

String和StringBuffer中的value[]都用于存储字符序列。但是:

  • String中的是常量(final)数组,只能被赋值一次
  • StringBuffer中的value[]是一个很普通的数组,通过append()方法将新字符串加入value[]末尾。这样也就改变了value[]的内容和大小了

2> “==”和equals的区别

  • “==”:用于基本类型的变量,“值”比较;用于引用类型的变量,对象的内存地址比较;
  • equals:默认情况下,比较引用类型的地址值。一般重写都是自动生成,比较对象的成员变量值是否相同
//代码1  
String sa = "ab";                                          
String sb = "cd";                                       
String sab=sa+sb;                                      
String s="abcd";  
System.out.println(sab==s); // false  
//当执行sa+sb时,JVM首先会在堆中创建一个StringBuilder类,将刚生成的String对象的堆地址存放在局部变量sab中
//局部变量 s 存储的是常量池中"abcd"所对应的拘留字符串对象的地址


//代码2  
String sc="ab"+"cd";  
String sd="abcd";  
System.out.println(sc==sd); //true  
//"ab"+"cd"会直接在编译期就合并成常量"abcd", 因此相同字面值常量"abcd"所对应的是同一个拘留字符串对象,自然地址也就相同。

3> Sting 常用方法

String(byte[] bytes) 
String(byte[] bytes, Charset charset)  
//修改编码
//经常使用new String(str.getBytes("ISO-8859-1"), "GBK"); 来转换编码问题
    
public boolean endsWith(String suffix)//测试此字符串是否以指定的后缀结束
public boolean endsWith(String prefix, int toffset)public boolean startsWith(String prefix)
public boolean startsWith(String prefix, int toffset) //指定索引开始的子字符串是否以指定前缀开始

public char charAt(int index);//返回指定索引处的 char 值
public int lastIndexOf(int ch)
public int lastIndexOf(int ch,int fromIndex)
public int indexOf(String str)    
public int indexOf(String str,int fromIndex) //指定的索引开始反向搜索;字符的方法也有

public String[] split(String regex)
public String[] split(String regex, int limit)//limit为数字的长度
public char[] toCharArray()//字符串转换为一个新的字符数组
public String substring(int beginIndex)    
public String substring(int beginIndex, int endIndex) 

public String replace(char oldChar,char newChar)
public String replace(CharSequence target, CharSequence replacement)//说白了也就是类型就是字符串
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
//如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;
public byte[] getBytes(Charset charset)
public int length()
public String trim()
public boolean isEmpty()
public String toLowerCase()    
public String toUpperCase()
public boolean equalsIgnoreCase(String anotherString);
public static String valueOf(boolean b)//将参数转换成字符串,还支持char/char[]/double/float/int/long和Object;Object:null对象等于 "null",否则,返回 obj.toString()



猜你喜欢

转载自blog.csdn.net/u013234928/article/details/89408714