首页IT科技java里string和char的区别(java中String类型的相关知识的简单总结)

java里string和char的区别(java中String类型的相关知识的简单总结)

时间2025-05-04 04:59:09分类IT科技浏览3969
导读:java中String类型的相关知识总结 一、常用方法:...

java中String类型的相关知识总结

一           、常用方法:

1.构造方法:

byte数组

可指定offset和length

可指定charset

char数组

可指定offset和count

字符序列

String StringBuffer StrngBuilder

2. 实例方法:

获取字符/码点/字节

​ charAt(int index) char

​ codePointAt(int index) int

​ 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的区别:

String不可变     ,线程安全

StringBuffer可变                 ,线程安全

StringBuilder可变           ,线程不安全

四           、缓存池:

1.字符串常量池(String pool)里存放着所有的字符串字面量 String a="aaa"; String b="aaa"; //a,b引用到的String pool里的同一个对象 a==b//true 2. new 出来的String对象放在堆区 String a=new String("aaa"); String b=new String("aaa"); a==b//false a=="aaa"//false //这里实际是先创建字面量"aaa",再去创建对象的

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

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

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

public String(String original) { this.value = original.value; this.hash = original.hash; } 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                。未经作者允许           ,请勿转载!

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

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
html登录注册界面设计代码怎么写(有趣的HTML实例(七) 注册登录界面Ⅱ(css+js)) 小米路由器存储远程电脑访问(小米路由器2代1T版本 PC端使用远程下载的详细方法)