美文网首页
5.Java常用类

5.Java常用类

作者: 芝麻酱的简书 | 来源:发表于2018-12-19 15:08 被阅读6次

字符串String、StringBuffer、StringBuilder

字符序列: 把多个字符按照一定得顺序排列起来.
字符串: 把多个字符串串联起来(好比羊肉串).

字符串的分类:
  • 不可变的字符串 : String当前对象创建完毕之后,该对象的内容(字符序列)是不能改变的,一旦内容改变就是一个新的对象.
  • 可变的字符串 : StringBuilder/StringBuffer当对象创建完毕之后,该对象的内容可以发生改变,当内容发生改变的时候,对象保持不变.

字符串的本质(底层是什么其实就是char[]),char表示一个字符,数组表示同一种类型的多个数据如何理解char[]:

     String  str = “ABCDEFG”;    //定义一个字符串对象,等价于
     char[] cs = new char[]{'A','B','C','D','E','F','G'};-
String类:

表示不可变的字符串,当前对象创建完毕之后,该对象的内容(字符序列)是不能改变的,一旦内容改变就是一个新的对象.

🏮String对象的创建:
1):直接赋一个字面量: String str1 = “ABCD”;
2):通过构造器创建: String str2 = new String(“ABCD”);
两种方式有什么区别,分别在内存中如何分布?

🏮String对象的空值:
1):表示引用为空(null): String str 1 = null; 没有初始化,没有分配内存空间.
2):内容为空字符串: String str2 = “”; 以及初始化,分配内存空间,不过没有内容.

🏮判断字符串非空:
1):引用不能为空(null);
2):字符内容不能为空字符串(“”);

🏮字符串的比较操作:
1):使用”==”号: 只能比较引用的内存地址是否相同.
2):使用equals方法: 在Object类中和”==”号相同,建议子类覆盖equals方法去比较自己的内容.
String类覆盖equals方法,比较的是字符内容.

🏮String对象比较:
1):单独使用""引号创建的字符串都是直接量,编译期就已经确定存储到常量池中;
2):使用new String("")创建的对象会存储到堆内存中,是运行期才创建;
3):使用只包含直接量的字符串连接符如"aa" + "bb"创建的也是直接量编译期就能确定,已经确定存储到常量池中(str2和str3);
4):使用包含String直接量(无final修饰符)的字符串表达式(如"aa" + s1)创建的对象是运行期才创建的,存储在堆中;

通过变量/调用方法去连接字符串,都只能在运行时期才能确定变量的值和方法的返回值,不存在编译优化操作.



常量池

专门存储常量的地方,都指的方法区中.
编译常量池: 把字节码加载斤JVM的时候,存储的是字节码的相关信息.(不研究)
运行常量池: 存储常量数据(研究).



拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String.

String和StringBuilder以及StringBuffer的区别(建议使用StringBuilder):

StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的.
唯一的区别:

  • String中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低.
  • StringBuilder和StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.

使用StringBuilder无参数的构造器,在底层创建了一个长度为16的char数组:
char[] value = new char[16];
此时该数组只能存储16个字符,如果超过了,得自动扩容:
-自动扩容(创建长度更大的数组,再把之前的数组拷贝到新数组)

此时性能极低,一般的,我们事先知道大概需要存储多少字符,在构造器中就应该设置.

//创建一个长度为80的char数组.
new StringBuilder(80);

常用方法:

append(Object val):表示追加任意类型数据
StringBuilder deleteCharAt(int index)  :删除字符串中,指定位置的字符

相关文章

  • 5.Java常用类

    字符串String、StringBuffer、StringBuilder 字符序列: 把多个字符按照一定得顺序排列...

  • 美团

    3.hashmap和hashtable的区别 4.介绍下mysql的常用数据库引擎以及底层实现 5.java怎么实...

  • 学而时习之---Java基础

    1.类和对象 2.java基本数据类型 3.Java变量类型 4.Java修饰符 5.Java运算符 6.Java...

  • Java核心基础学习(一):Object类

    常用类 Object类 Object类是所有类、数组、枚举类的父类 Object类的常用方法:

  • runtime常用方法

    类 类结构 类实例结构 常用函数 方法 结构 类方法的常用函数 方法的常用函数 方法选择器 动态创建类 示例: 动...

  • Java常用类,这一次帮你总结好

    常用类 常用类概述: 内部类 Object类 包装类 数学类 时间类 字符串 String Builder和Str...

  • 5.Java变量

    5.Java变量 ?转载请保留原文链接:http://dashidan.com/article/java/basi...

  • 5.Java

    ++ 混合使用++a前边 先加后用, a++后边 先用后加 分开使用a++和++a 没有区别。 Jshell 常量...

  • [Java并发系列] 5.Java并发工具类

    在J.U.C包中,提供了几个非常有用的并发工具类,通过使用这些工具类,可以有效提高并发编程中,并发流程的控制,以提...

  • Objective-C之NSDictionary学习笔记(IOS

    NSDictionary类简介 属性表(@property) 常用方法 常用类方法 词典对象的生成 常用实例方法 ...

网友评论

      本文标题:5.Java常用类

      本文链接:https://www.haomeiwen.com/subject/otgdkqtx.html