java中String类型的相关知识的简单总结()

  本篇文章为你整理了java中String类型的相关知识的简单总结()的详细内容,包含有 java中String类型的相关知识的简单总结,希望能帮助你了解 java中String类型的相关知识的简单总结。

  ​ getBytes() byte[]

  ​ getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) void

  ​ toCharArray() char[]

  ​ length() int

  ​ codePointCount(int beginIndex,int endIndex) int

  字符串操作

  ​ concat(String str) String

  ​ substring(int beginIndex,int endIndex) String

  ​ split(String regex) String[]

  ​ trim() String

  ​ toUpperCase()/toLowerCase String

  ​ replace(char oldChar,char newChar) String

  ​ replace(CharSequence target,CharSquence replacement) String

  ​ replaceAll(String regex,String replacement) String

  ​ replaceFirst(String regex,String replacement) String

  ​ contains(CharSequence s) boolean

  ​ endsWith(String suffix)/startsWith(String prefix) boolean

  ​ equals(Object anObject) boolean

  

public boolean equals(Object anObject) {

 

   if (this == anObject) {

   return true;

   if (anObject instanceof String) {

   String anotherString = (String)anObject;

   int n = value.length;

   if (n == anotherString.value.length) {

   char v1[] = value;

   char v2[] = anotherString.value;

   int i = 0;

   while (n-- != 0) {

   if (v1[i] != v2[i])

   return false;

   i++;

   return true;

   return false;

  

 

  ​ matches(String regex) boolean

  ​ indexOf(int ch/String str)/lastIndexOf()

  3. 静态方法:

  ​ String.format(String format,Obect... args) String

  ​ String.valueOf(xxx) String

  二、底层实现:

  jdk1.8中String类型底层就是一个char数组:

  

public final class String

 

   implements java.io.Serializable, Comparable String , CharSequence {

   /** The value is used for character storage. */

   private final char value[];

  

 

  三、不可变性:

  String最为人所津津乐道的便是它的不可变性(immutable),这里就引出两个问题,String如何做到不可变的,以及不可变的好处

  1. 如何实现不可变:

  jdk1.8中String的字符存储在一个char数组里

  char数组final,不可变

  没有提供任何可以修改数组内容的方法

  2. 不可变的好处:

  不可变,线程绝对安全

  作为参数不可变,更安全

  字符串常量池的需要,可以共享而不用担心被谁改变

  hash值不可变,只要算一次,可以缓存hash

  3. String和StringBuffer和StringBuilder的区别:

  


 

 

  new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址(注意,此时不需要从堆中复制到池中,否则,将使得堆中的字符串永远是池中的子集,导致浪费池的空间)!

  
关于String str=new String("123")创建了几个对象的问题

  ​ 很显然,new只调用了一次,也就是说只创建了一个对象。而这道题目让人混淆的地方就是这里,这段代码在运行期间确实只创建了一个对象,即在堆上创建了"abc"对象。而为什么大家都在说是2个对象呢,这里面要澄清一个概念,该段代码执行过程和类的加载过程是有区别的。在类加载的过程中,确实在运行时常量池中创建了一个"abc"对象,而在代码执行过程中确实只创建了一个String对象(堆上)。

  
3. intern()方法

  先判断字符串常量池里是否已经有了这个字符串,如果有就返回常量池中该字符串的引用,没有就在常量池中添加并返回常量池中的引用。

  

String a=new String("aaa");

 

  a=="aaa"//false

  a=a.intern()

  a=="aaa"//true

  

 

  五、参考资料

  深入理解Java中的String - 平凡希 - (cnblogs.com)

  《java核心技术卷Ⅰ》

  Java 基础 - 知识点 Java 全栈知识体系 (pdai.tech)

  
鄙人只是一名在读的软件工程专业的本科生,正在复习找工作,故而将复习时遇到的一些有意思的东西总结出来,既是加深理解,也是便于日后复习。

  鄙人才疏学浅,若文中有谬误之处,还望诸位不吝斧正,以免误人子弟。若有同道中人想一同讨论学习,也可以联系我= 2938189276@qq.com。未经作者允许,请勿转载!

  路漫漫其修远兮,吾将上下而求索。

  以上就是java中String类型的相关知识的简单总结()的详细内容,想要了解更多 java中String类型的相关知识的简单总结的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: