作为java.lang包中非常常用的一个类,我们有必要来了解一下这个类的一些构造方法和常用方法:
1构造方法
在前期的学习中我们知道了String类可以直接用String s = "向软件工程师进发的小白";或String s = new ("向软件工程师进发的小白");这种方式来新建一个字符串对象,今天,我们就来学习新的一些构造方法:
其中,我们只需要知道其实Stirng类的构造方法中还能够传入byte数组或者char数组来组成一个字符串就行,而数组后面还可以跟两个参数:一个是初始位置,一个是截取的长度。
2常用方法
作为一个字符串类型,我们肯定要知道它有哪些方法可以调用,才能提高我们的开发效率,之前我们讲了它的equals方法和toStirng方法,今天我们就讲些除了这两个其他常用的:
当你需要取得字符串某一特殊位置的字符时,就需要用这个方法。
equals方法只能判断相等不相等,而compareTo方法就能比较两个字符串哪个大了,如果调用者大,返回大于0的整数;如果调用者等于传入的,返回0;如果调用者小,返回小于0的整数
当你需要判断字符串里面有没有固定的字符序列(字符串)时,就需要contains方法。
当你需要判断字符串是否以某个字符串结尾,就需要用这个方法。
equals方法比较要考虑大小写,这个方法就可以忽略大小写。
当你需要找某个指定的字符串在该字符串中第一次出现的位置时,需要用这个方法。
判断这个字符串是否为空。
当你需要找某个指定的字符串在该字符串的最后出现的位置时,需要用这个方法。
这个方法要和数组的length属性分开。返回字符串的长度用的是length方法,返回数组的长度用的是length属性。
更改字符串里固定字符的值。
不用管正则表达式,传入一个字符串进入,这个方法用这个字符串为界限,划分成数组中的若干值。
判断是否以指定字符串开头。
输入起始下标或者输入起始和末尾的下标,截取出指定的字符串。
转换为字符类型的数组。
转换为小写。
转换为大写。
将字符串前和后的空白省略。
静态方法,将传入的对象转换为字符串。对于valueOf我们之前其实在方法覆盖和重载的对比中我们就有简要提到过,我们现在再看看println的源代码,会发现底层都会调用String.valueOf这个方法,所以我们可以知道输出到控制台的东西都会转换为字符串。
StringBuffer与StringBuilder
关于java.lang包下的类,其实还有两个与String类差不多的两个类:StringBuffer与StringBuilder类。这两者非常相像的,区别就是前者线程安全,后者线程不安全(以后就知道了)。:
对于String类型,我们之前在Java运行内存图说过,只要在类中用""括起来的都是字符串常量,会依次在我们的JVM中的常量池中慢慢堆积。因此,如果我们用String类型在进行一些字符串的拼接的时候会显得效果不那么理想,因为每有一个新的字符串,常量池中就会多一个字符串常量。而StringBuffer和StringBuilder就是来解决这样的问题的。
那这两个类是怎么解决这样的问题呢?一切还要从源代码说起(以StringBuffer为例):
先看它的简单的三个构造方法,发现它只是调用了父类的构造方法,因此我们继续往上看:
我们会发现它的父类是一个AbstractStringBuilder类,通过它的这三个构造方法及父类的构造方法我们可以看出:
1、它的默认初始容量是16,我们可以在构造方法中传入一个int类型的初始容量大小或者在构造方法中传入字符串使之有内容。
2、这个类的底层是个byte数组,所以我们在进行字符串拼接的时候不会像String类那样新建一个字符串常量。
3、如果容量超过16,会自动扩容。
而作为一个字符串类,至少要知道它要怎么拼接字符串:
其他的删除等的其他方法读者可以自行查找。
对于要经常进行拼接的字符串,我们就使用StringBuffer或StringBuilder类来进行。减少给JVM的压力。
扩容会降低效率,建议用StringBuffer和StringBuilder类时先赋一个大概的值。减少扩容的次数。
Enum类对于这个Enum枚举类,我们也是简要介绍一下。在我们平时的编程的时候,经常会用到标记。最常用的就是boolean类型的标记,比如:我们在判断一个方法执行成功或者失败,我们返回一个boolean类型的值。true表示执行成功,false表示执行失败。
但有没有可能我们用于标记的记号不够用呢?这种情况是有的,这时候我们可以用int类型或者其他数据类型来充当标记的记号。但其实这种方法不太好,因为这种标记有任意种数值来表示一种结果,如果后期我们修改了标识或者其他情况,这种标记无疑是很难辨认的。因此,我们就需要Enum类:
这个类也是一个引用数据类型,需要我们自己创建一个类来写。比如:我想要一个枚举类用于判断当一个数大于0,走右边;等于0,走中间;小于0,走左边。
Enum中的属性可以看成是常量。这个类也可以加方法,这里不再介绍。
要作为一个标记的类型,最好能保证这个类型里的值都能够被作为记号来识别。这就解释了为什么像int这种类型的值不推荐做标记。因为他们的值实在是太多了,不能都作为记号,难以辨别。所以enum就能很好的解决这个问题。