济宁网站建设优化亿峰,网站绑定域名,深圳福田园岭网站建设,重庆新闻联播今天笔上得来终觉浅,绝知此事要躬行 #x1f525; 个人主页#xff1a;星云爱编程 #x1f525; 所属专栏#xff1a;javase #x1f337;追光的人#xff0c;终会万丈光芒 #x1f389;欢迎大家点赞#x1f44d;评论#x1f4dd;收藏⭐文章 目录 一、包装类
1.1包装类… 笔上得来终觉浅,绝知此事要躬行 个人主页星云爱编程 所属专栏javase 追光的人终会万丈光芒 欢迎大家点赞评论收藏⭐文章 目录 一、包装类
1.1包装类的分类
1.2包装类和基本数据的转换
1.3案例
1.4Integer创建机制
1.5Integer比较问题
二、String
2.1基本介绍
2.2 String对象的创建方式 创建机制理解
2.3 String比较问题
2.4字符串特性
2.4.1介绍
2.4.2总结
2.4.3例题
2.5 String常用方法
三、StringBuffer
3.1基本介绍
3.2StringBuffer比较String
3.3StringBuffer的构造器
3.4String和StringBuffer相互转换
3.5 StringBuffer类常见方法
四、StringBuilder
4.1基本介绍
4.2 StringBuilder常用方法
4.3 String、StringBuffer、StringBuilder的比较
4.4 String、StringBuffer、StringBuilder的使用选择
结语 一、包装类(Wrapper)
1.1包装类的分类
说明
1针对八种基本类型定义相应的引用类型--包装类。
2有了类的特点就可以调用类中的方法
基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble
1.2包装类和基本数据的转换
1jdk5前的手动装箱和拆箱方式装箱基本类型-包装类型反之拆箱。
2jdk5以后含jdk5的自动装箱和自动拆箱方式。
3自动装箱底层调用的是valueOf方法例如Integer.valueOf()
1.3案例
public class Test1 {public static void main(String[] args) {int n10;//手动装箱 int-IntegerInteger xInteger.valueOf(n);//手动拆箱 Integer-intint yx.intValue();//自动装箱int a20; //底层调用的是 Integer.valueOf(20);Integer integera;//自动拆箱int a2integer; //底层调用的是 intValue()方法}
}
1.4Integer创建机制
请看如下代码试着输出运行结果
public class Test2 {public static void main(String[] args) {Integer s1new Integer(10);Integer s2new Integer(10);System.out.println( s1s2 );Integer n1100;Integer n2100;System.out.println( n1n2 );Integer m1128;Integer m2128;System.out.println( m1m2 );}
}
运行结果false true false。
解释
1对于第一种创建方式new Integer() 因为new在堆上开辟了新的空间s1和s2是两个不同的对象对于引用数据类型比较的是地址故为false.
2第二种创建方式
源码 这里的cache是一个存储器Integer类里把-128到127范围内的数字全部创建了一个对象存在cache了所以装箱的时候在这个范围的话直接返回存储器里的对象了不用每次都new新的堆空间。
对于n1、n2在-128~127范围内没有开辟新的空间故其相等而对于m1、m2不在-128~127范围内需要new一个空间是两个不同的对象故为false。
1.5Integer比较问题 public static void main(String[] args) {Integer n1129;int n2129;Integer n3129;System.out.println(n1n2);System.out.println(n1n3);}
结论
1只要有基本数据类型int比较的就是数值否则为空间地址。
2对于Integer integerint 装箱方式int在-128~127范围内不会new新空间否则将会new新空间。
3比较引用数据类型比较的是空间地址是否相等。
二、String
2.1基本介绍
1String对象用于保存字符串也就是一组字符序列
2字符串常量对象是用双引号括起来的字符序列
3字符串的字符使用Unicode字符编码一个字符不分字母还是汉字占两个字节
4String类的构造方法很多
5String类实现了接口Serializable,即String可以串行化可以在网络传输
String类实现了接口Comparable,即String对象可以比较大小。
6String是final类不能被其他的类继承
7String有属性 private final char value[]用于存放字符串内容同时value是一个final类型的属性不可以被修改。
2.2 String对象的创建方式
方式一直接赋值
String str1hello;
方式二调用构造器
String str2new String(hello) 创建机制理解
方式一先从常量池查看是否有hello数据空间如果有直接指向如果没有则重新创建然后指向最终的常量池的空间str1最终指向的是常量池中的地址 方式二先在堆中创建空间里面维护了value属性指向常量池的hello数据空间如果常量池也没有“hello”则重新创建如果有直接通过value指向str2最终指向的是堆中的空间的地址。
2.3 String比较问题
补充知识点
1当调用intern方法时如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串则返回来自池的字符串。 否则此String对象将添加到池中并返回对此String对象的引用。即str.intern()最终返回的是常量池的地址。
2String类中的equals方法是重写过的比较的是值。其源码如下 例题 public static void main(String[] args) {String str1hello;String str2new String(hello);System.out.println(str1str2);System.out.println(str1.equals(str2));System.out.println(str1str2.intern());System.out.println(str2str2.intern());}
答案为 false true true false
2.4字符串特性
2.4.1介绍
1String是一个final类代表不可变的字符序列。
2字符串是不可变的一个字符串对象一旦分配其内容是不可变的。
请看如下代码试问其分别创建了几个对象
① String strhello;strworld;
创建了两个对象hello、world
②
String strhelloworld;
创建了一个对象helloworld;
解释String strhelloworld编译时在底层优化等价于String strhelloworld。
③
String ahello;
String bworld;
String cab;
创建了3个对象其执行流程为 2.4.2总结
String str1abcd;常量相加看的是常量池
String str2ab;变量相加是在堆中
2.4.3例题
把运行结果发到评论区
public class Test6 {public static void main(String[] args) {A a new A();a.exchange(a.str,a.ch);System.out.print(a.str and );System.out.println(a.ch);}
}class A{String strhello;final char[] ch{j,a,v,a};public void exchange(String str,char[]ch){strabc;ch[0]z;}
}
2.5 String常用方法 ①equals:区分大小写判断内容是否相等 ②equalsIgnoreCase:忽略大小写判断内容是否相等 ③length:获取字符的个数字符串长度 ④indexOf:获取字符在字符串中第一次出现的索引下标索引从0开始如果找不到返回-1 ⑤lastIndexOf:获取字符在字符串中最后一次出现的索引下标索引从0开始如果找不到返回-1 ⑥subString:截取指定范围的字符串 ⑦trim:去前后空格 ⑧charAt:获取某所引出的字符注意不能使用Str[index]这种方式 ⑨replace替换字符串中的字符 ⑩compareTo:比较两个字符串的大小 ⑪toCharArray:将字符串转换为字符数组 ⑫format格式字符串,%s字符串%c字符%d整形%f浮点型 ⑬split:分割字符串对于某些分割字符我们要转义例如\ -\\ 在使用String类方法时有看不懂的建议看源码ctrl左键进入源码
三、StringBuffer
3.1基本介绍 1java.lang.StringBuffer代表可变的字符串序列可以对字符串内容进行增删
2StringBuffer是个容器。
3很多方法与String相同但StringBuffer是可变长度的。
3.2StringBuffer比较String
1String保存的是字符串常量里面的值不能更改每次String类的更新实际上是更改地址效率较低
2StringBuffer保存的是字符串常量里面的值可以更改每次StringBuffer的更新实际上可以更改内容不用每次更新地址效率较高。
3.3StringBuffer的构造器
1StringBuffer()
构造一个其中不带字符的字符串缓冲区其初始容量为16个字符
2StringBuffer(CharSequence seq)
构造一个字符串缓冲区它包含与指定的CharSequence相同的字符
3StringBuffer(int capacity)
构造一个不带字符但具有指定初始容量的字符串缓冲区即对char[]大小进行指定
4StringBuffer(String str)
构造一个字符缓冲区并将其内容初始化为指定的字符串内容
3.4String和StringBuffer相互转换
1String-StringBuffer
①使用构造器
String strhello;
StringBuffer sbnew StringBuffer(str);
②使用append方法
String strhello;
StringBuffer sbnew StringBuffer();
sbsb.append(str);
2StringBuffer-String
①使用StringBuffer提供的toString方法
StringBuffer sbnew StringBuffer(hello);
String strsb.toString();
②使用构造器
StringBuffer sbnew StringBuffer(hello);
String strnew String(sb);
3.5 StringBuffer类常见方法 ①append拼接追加字符串 ②delete删除指定字符串 ③replace(start ,end,String)将start~end间的内容替换掉不含end,即[start,end)。 ④indexOf查找子串在字符串第一次出现的索引索引从0开始找不到返回-1 ⑤insert在指定位置插入字符串 ⑥length:获取字符的个数字符串长度 四、StringBuilder
4.1基本介绍
1StringBuilder的直接父类是AbstractStringBuilderStringBuilder实现了Serializable接口即StringBulider的对象可以串行化在父类中AbstractStringBuilder有属性char[]value,不是final类型该value数组存放字符串内容引出存放在堆中的。
2StringBuffer是一个final类不能被继承
3因为StringBuffer字符内容是存在char[]value,所以在变化(增加/删除) 时不用每次都更换地址(即不是每次创建新对象)所以效率高于String。
4StringBuilder是一个可变的字符序列提供一个与StringBuffer兼容的API但不保证同步StringBuilder线程不安全该类被设计用作StringBuffer的一个简单替换用在字符串缓冲区被单个线程使用的时候。如果可能建议优先使用该类现实中它比StringBuffer快
5在StringBuilder上的主要操作是append和insert方法可重载这些方法以接受任意类型数据。
6StringBuilder 的方法没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用
4.2 StringBuilder常用方法
StringBuilder有与StringBuffer兼容的API可以往看StringBuffer类常见方法
4.3 String、StringBuffer、StringBuilder的比较
1StringBuffer和StringBuilder非常类似均代表可变的字符序列而且方法也一样。
2String是不可变字符序列效率低但是复用率高
3StringBuffer是可变字符序列效率较高增删线程安全
4StringBuilder是可变字符序列效率最高线程不安全。
5String使用注意事项
String sa;
sb;
执行上诉代码时原来的a已经丢弃了现在又产生了一个字符串sb(也就是ab);
如果多次执行这些改变字符串内容的操作会导致大量副本字符串对象留在内存中减低效率如果这样的操作放到循环中会极大影响程序的性能。所以如果我们对String做大量修改时不要使用String.
4.4 String、StringBuffer、StringBuilder的使用选择
1如果字符串存在大量的修改操作一般使用StringBuffer或StringBuilder
2如果字符串存在大量的修改操作并在单线程的情况下使用StringBuilder
3如果字符串存在大量的修改操作并在多线程的情况下使用StringBuffer
4如果字符串存在少量的修改操作并被多个对象引用使用String。
结语
感谢您的耐心阅读希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值不妨动动手指给个赞让更多的朋友看到。同时点击关注不错过我们的每一次精彩分享。若想随时回顾这些知识点别忘了收藏⭐让知识触手可及。您的支持是我们前进的动力期待与您在下一次分享中相遇 路漫漫其修远兮吾将上下而求索。
文章转载自: http://www.morning.drmbh.cn.gov.cn.drmbh.cn http://www.morning.qgdsd.cn.gov.cn.qgdsd.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.rwhlf.cn.gov.cn.rwhlf.cn http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn http://www.morning.rqckh.cn.gov.cn.rqckh.cn http://www.morning.lmdfj.cn.gov.cn.lmdfj.cn http://www.morning.xptkl.cn.gov.cn.xptkl.cn http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn http://www.morning.wclxm.cn.gov.cn.wclxm.cn http://www.morning.csdgt.cn.gov.cn.csdgt.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn http://www.morning.hgfxg.cn.gov.cn.hgfxg.cn http://www.morning.cwtrl.cn.gov.cn.cwtrl.cn http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.nzkc.cn.gov.cn.nzkc.cn http://www.morning.sryyt.cn.gov.cn.sryyt.cn http://www.morning.clpfd.cn.gov.cn.clpfd.cn http://www.morning.rlxnc.cn.gov.cn.rlxnc.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.rrbhy.cn.gov.cn.rrbhy.cn http://www.morning.fglth.cn.gov.cn.fglth.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.smmrm.cn.gov.cn.smmrm.cn http://www.morning.qnwyf.cn.gov.cn.qnwyf.cn http://www.morning.rxnl.cn.gov.cn.rxnl.cn http://www.morning.pxjp.cn.gov.cn.pxjp.cn http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn http://www.morning.tldhq.cn.gov.cn.tldhq.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.rdnpg.cn.gov.cn.rdnpg.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.hqllj.cn.gov.cn.hqllj.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.jyzxt.cn.gov.cn.jyzxt.cn http://www.morning.fwrr.cn.gov.cn.fwrr.cn http://www.morning.nngq.cn.gov.cn.nngq.cn http://www.morning.brcdf.cn.gov.cn.brcdf.cn http://www.morning.trhlb.cn.gov.cn.trhlb.cn http://www.morning.qpsdq.cn.gov.cn.qpsdq.cn http://www.morning.cdygl.com.gov.cn.cdygl.com http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.llxns.cn.gov.cn.llxns.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.jyknk.cn.gov.cn.jyknk.cn http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.brbnc.cn.gov.cn.brbnc.cn http://www.morning.pgggs.cn.gov.cn.pgggs.cn http://www.morning.dtzsm.cn.gov.cn.dtzsm.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.fosfox.com.gov.cn.fosfox.com http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.nwfpl.cn.gov.cn.nwfpl.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn http://www.morning.rqhn.cn.gov.cn.rqhn.cn http://www.morning.nrpp.cn.gov.cn.nrpp.cn http://www.morning.fplwz.cn.gov.cn.fplwz.cn http://www.morning.wcjgg.cn.gov.cn.wcjgg.cn http://www.morning.lqynj.cn.gov.cn.lqynj.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn