关于Java常用类,我们日常的学习中经常都会遇到,所以只需了解其中常用的方法即可。
- JavaSE进阶—常用类(一)
- 一、Object
- 二、字符串相关类
- (一)String
- (二)StringBuffer和StringBuilder
- (三)总结
Object为所有类的父类,当一个类没有继承关系时默认继承于Object。所以因为继承关系,所有类都拥有Object提供的属性与方法,因为多态关系,所有的类的对象,都可以转换为Object的对象。
Object中提供的方法:
-
hashCode:获取对象的哈希码值(可以理解为就是对象的内存地址);
-
toString:将对象转换为字符串,Object提供的该方法是将对象所属的类的全路径,拼接@,在拼接对象的内存地址的16进制值如:com.xxx.xxx.类名@765fd778df, 因为Object提供的该方法使用较为困难,所以一般需要重写toString方法。
-
equals:比较两个对象是否一致, Object提供的该方法是比较两个对象的内存地址是否相同。因为Object提供的该方法只能比较内存地址,无法比较对象的值,所以我们通常会重写该方法。
重写思路: 1,判断调用该方法的对象与传入的对象内存地址是否相同 2,判断传入的对象是否属于该类对象 3,将传入的对象转换为该类对象 4,使用调用该方法的对象与传入的对象的属性值一一对比
- getClass: 返回此 Object 的运行时该对象的类,该方法返回一个Class对象 。这里只需要了解即可,具体讲解会在反射篇中讲到。
- notify、notifyAll和wait:线程间通讯,线程篇会着重讲到。
代码演示:
public class Demo { public static void main(String[] args) { //创建两个Object对象,仅供测试使用,没有特殊意义 Object obj01 = new Object(); Object obj02 = new Object(); //比较obj01和obj02内存地址是否相同 boolean b = obj01.equals(obj02); System.out.println(b); //获取obj01的哈希码值 System.out.println(obj01.hashCode()); //toString System.out.println(obj02.toString()); } }二、字符串相关类 (一)String
不可变字符串,会在常量区多次占据内存,大量运算时导致程序卡顿,甚至崩溃。使用时运行速率比较慢。
常用方法:(注意,加粗为最常用方法,需要记住)
-
equals:重写Object的方法,可以用来判断字符串内容是否相同
-
equalsIgnoreCase:忽略大小写比较字符串内容是否相同
-
startsWith:判断字符串以什么字符或字符串开始
-
trim:清除字符串前后空格(字符串中空格不能清除)
-
contains:判断子字符是否在当前字符串中存在
-
indexOf:判断子字符串在字符串中第一次出现的位置,如果不存在返回-1
-
lastIndexOf:判断子字符串在字符串中最后一次出现的位置,如果不存在返回-1
-
length:获取字符串长度
-
toCharArray:将字符串转为字符(char)数组
-
getBytes:将字符串转换为字节(byte)数组
-
new String(byte[] bs):将字节数组转换为字符串
-
new String(char[] cs):将字符数组转换为字符串
-
new String(bytes, charset):将字节数组转换为特定编码格式的字符串
-
charAt(int index):获取字符串指定位置的字符
-
replace(oldStr,newStr):替换,将指定字符串替换为新的字符串
-
substring(开始位置):截取,从开始位置截取到字符串末尾
-
substring(开始位置,结束位置):截取,从开始位置截取到结束位置-1
-
split(字符串):切割,参数为切割条件,比如参数为逗号,则按逗号将字符串切割成多个子字符串。
-
toUpperCase:将字符串中小写字母转换为大写字母
-
toLowerCase:将字符串中大写字母转换为小写字母
代码演示:
public class Demo { public static void main(String[] args) { String str = new String("abcdefg"); //1.equalsIgnoreCase()判断两个字符串是否相等,忽略大小写,返回值是Boolean System.out.println(str.equalsIgnoreCase("ABCDEFG")); //2.equals()判断字符串内容是否相等,返回值是Boolean System.out.println("qqdd".equals("qQdd")); //3.charAt()获取相应位置的字符,返回值是char System.out.println(str.charAt(2)); //4.toCharArray()将字符串转换为字符数组,返回值为字符数组 char[] chars = str.toCharArray(); System.out.println(chars); //5.indexOf()判断字符串在字符中第一次出现的位置,存在则返回位置,不存在返回-1 System.out.println(str.indexOf("bc")); //6.startsWith()判断字符串是否以相应的字符串开始,如果是则返回true System.out.println(str.startsWith("ab")); //7.endsWith()判断字符串是否以相应的字符串结束,是则返回true System.out.println("helloworld.java".endsWith(".java")); System.out.println("-------------优雅的分割线------------"); //8.getBytes()将字符串转换为字节数组 byte[] bytes = str.getBytes(); for (byte b : bytes) { System.out.print(b+" "); } //9.trim()删除字符串的前导和尾随的空格,返回string,无参数 System.out.println("n删除后"+" string hello ".trim()+str.trim()); //10.substring,从指定位置开始截取字符串,结果为开始位置到结束位置-1; System.out.println(str.substring(1, 3)); //11.split(),根据指定的字符分割字符串,返回字符数组 String[] strs = "a,ab,abc,abcd".split(","); for (String str1 : strs) { System.out.println(str1); } System.out.println("-------------优雅的分割线------------"); //12.contains()判断字符串是否在字符中存在,如果存在,则返回true System.out.println(str.contains("a")); //13.replace()替换相应的字符串,返回修改后的字符串 System.out.println(str.replace("bcd", "123")); //14.lastIndexOf()判断子字符串在字符串中出现的最后一次位置 System.out.println(str.lastIndexOf("f")); //15.toUpperCase(),将字符串中的字母转换为大写 System.out.println(str.toUpperCase()); //16.toLowerCase(),将字符串中的字母转换为小写 System.out.println(str.toLowerCase()); } }(二)StringBuffer和StringBuilder
可变字符串,使用效率远远高于String;StringBuffer和StringBuilder中的方法完全一样,唯一的区别就在于StringBuffer是线程安全的(线程篇笔记重点讲到)。
常用方法(均常用):
-
append(1):给尾部添加,参数为要添加的字符串;
-
insert:插入,两个参数,分别是1:插入的位置,2:插入的字符串;
-
delete:删除,两个参数,1:开始删除的位置,2:结束删除的位置;
-
replace:替换,三个参数1:开始替换位置,2:结束替换位置,3:替换后的字符串;
-
toString:将StringBuffer对象或StringBuilder对象转换为字符串。
代码演示:
public final class Demo { public static void main(String[] args) { StringBuilder sb = new StringBuilder("hello"); //在字符串后追加字符串 sb.append(" world"); System.out.println(sb); //删除指定未知的内容,从start开始到end-1结束 sb.delete(5,6); System.out.println(sb); //在指定的位置插入字符串,1指定的位置,2插入的字符串 sb.insert(5, " "); System.out.println(sb); //替换字符串 sb.replace(5, 7, "XXX"); System.out.println(sb); //将StringBuilder对象转换成String对象 String str = sb.toString(); System.out.println(str); } }(三)总结
String 类型和 StringBuffer 的主要性能区别:String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类。