💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### java.lang包 不需要导入 *** ### Object类 Object类是所有类的父类,也是唯一一个没有父类的类 **常见方法:** **①public boolean equals(Object obj)比较两个引用数据类型是否相等** *** **面试题:equals与==的区别** ==既能比较基本数据类型,又能比较引用数据类型,比较基本数据类型时,比较的是字面真值;比较引用数据类型时比较的是引用值是否相等(即地址是否相等) equals只能比较引用数据类型,而且子类可以通过重写的方式定制比较规则 *** **面试题:String s1 = "hello";与String s2 = new String("hello");的区别** String s1 = "hello"只在字符串常量池中创建了一个对象; String s2 = new String("hello");在在字符串常量池中和堆中各创建一个对象 #### 内存模型 String s1 = "hello"; ![](https://box.kancloud.cn/e5e968947e8990d0177712f6d420d3ad_658x399.png) String s2 = new String("hello"); ![](https://box.kancloud.cn/fbd2c2689a2d52f3d5538bf4d7a05ebf_659x399.png) *** **②public int hashCode()返回十进制整数,唯一标识一个对象** 如果两个对象用equals方法比较返回true,这两个对象的hashCode一定一样;如果两个对象的hashCode一样,equals不一定返回true *** **③public String toString() 返回 类名@hashcode** *** **④protected void finalize() throws Throwable { }** **面试题:final,finally,finalize有什么区别** final能修饰类,方法,属性 final修饰类,该类不能被继承 final修饰方法,该方法不能被重写 final修饰属性(常量),程序运行时不可以改变 finally一般用于异常处理,存放一定要执行的代码,大多数用于回收资源 finalize与垃圾回收机制有关,没有引用指向的对象,JVM会视其为垃圾对象,JVM会自动调用这个对象的finalize方法,释放内存空间 *** ### 包装类 在Java中,基本数据类型不被视为对象,包装类可以将基本数据类型包装成对象,从而可以调用一些方法 **基本数据类型对应的包装类** ![](https://box.kancloud.cn/e4d643ea03f4e3fd9608569155454f53_570x329.png) ~~~ public class BaoZhuangClassDemo1 { public static void main(String[] args) { // 包装类的功能 // 1.进行与字符串之间的相互转换 // ①基本数据类型转字符串 // int num1 = 200; // String strNum1 = Integer.toString(num1);// 包装类转换 // System.out.println(strNum1+1); // double num2 = 9.999; // String strNum2 = Double.toString(num2); // // String的valueOf()也能将基本数据类型转成字符串 // String strNum3 = String.valueOf(num1); // String strNum4 = String.valueOf(num2); // boolean b1 = false; // String strB1 = Boolean.toString(b1); // System.out.println(strB1); // char c[] = {'h','e','l','l','o'}; // String c1 = new String(c); // System.out.println(c1); // ②字符串转基本数据类型 String strNum1 = "123"; int num1 = Integer.parseInt(strNum1); // 特殊情况 boolean b1 = Boolean.valueOf(strNum1); System.out.println(b1); // 转字符数组 char c[] = strNum1.toCharArray(); for(char c1:c) { System.out.println(c1); } // 2.能够像基本数据类型一样存值 // int num = 1; // num = null;// 基本数据类型不能为null // 自动装箱 // Integer num1 = 2;// 相当于Integer num1 = new Integer(2); // Integer num2 = 5; // 自动拆箱--默认调用intValue()转成了基本数据类型 // System.out.println(num1+num2); } } ~~~ *** ### String字符串常量 String代表一组不可变的字符串(对它的任何改动都不是在原有的基础上进行的,都是在创建新的字符串) **String是不能被继承的,因为是final类** **常用方法:** ~~~ public class StringDemo1 { public static void testStr1() { String str = ""; for(int i = 0;i < 100000;i++) { str += i; } } public static void testStr2() { String str = ""; for(int i = 0;i < 100000;i++) { str.concat(String.valueOf(i)); } } public static void main(String[] args) { // 字符串常量 // String str1 = "hello"; // String str2 = new String("hello"); // str1 = str1 + "world"; // System.out.println(str1); // byte[] b = str1.getBytes(); // for(byte b1:b) { // System.out.println(b1); // } // System.out.println(new String(b)); // System.out.println(str1 == str2); // System.out.println(str1.equals(str2)); // 常用方法 // 1.equalsboolean equals(String) 比较两个字符串字面量是否相等 System.out.println("hello".equals("Hello")); // 2.boolean equalsIgnoreCase(String) 忽略大小写比较 System.out.println("hello".equalsIgnoreCase("Hello")); System.out.println("hello".toUpperCase()); System.out.println("HELLO".toLowerCase()); // 3.char charAt(int) 返回指定索引处的字符 System.out.println("hello".charAt(3)); // 4.String substring(int begin) 截取begin之后的所有子串 System.out.println("abcdefghijklmn".substring(4)); // 5.String substring(int begin,int end) 截取begin到end-1的字串 System.out.println("abcdefghijklmn".substring(4,6)); // 6.String trim() 专门用来去开始和结尾的空格 System.out.println(" hello world ".trim()); String username = "abcde"; if(username == null || username.trim().equals("")) { System.out.println("您的用户名填写有误"); } // 7.int length( ) 返回字符串长度 System.out.println(" hello".length()); // 数组.length 字符串.length()方法 集合.size() for(int i = 0;i < username.length();i++) { System.out.println(username.charAt(i)); } // 8.int indexOf/lastIndexOf(char) // indexOf返回参数在字符串当中第一次出现的索引值,找不到返回-1 System.out.println("fgdfgdhdsdfsdfghasdash".indexOf("z")); System.out.println("fgdfgdhgddsdfsdfghasdash".lastIndexOf("gd")); System.out.println("fgdfgd".indexOf("gd",2)); // lastIndexOf("gd",7),索引值7之前gd最后一次出现的索引值 System.out.println("fgdfgdaaaaadasd".lastIndexOf("gd",7)); // 9.String concat(String str) 连接--不重要 long start = System.currentTimeMillis(); testStr2(); long end = System.currentTimeMillis(); System.out.println((end-start)/1000); // 10.String[] split(String regex) 切 String suit[] = "黑桃,红桃,方片,草花".split(","); for(String s:suit) { System.out.println(s); } String s1[] = "黑桃^红桃^方片^草花".split("\\^"); System.out.println(s1.length); for(String s:s1) { System.out.println(s); } String s2[] = "黑打发士大夫黑都发生黑水电费黑".split("黑"); System.out.println(s2.length); for(String s:s2) { System.out.println("^^"+s); } System.out.println("hello".replace('l', 'z')); System.out.println("hello".startsWith("hee"));// false System.out.println("hello".endsWith("llo"));// true } } ~~~ *** ### StringBuffer类 StringBuffer代表一组可变的字符串面,对它所有的改动,都是在原有字符串基础上进行的,不生成新的对象 *** ### StringBuilder类 **面试题:String,StringBuffer,StringBuilder之间有什么区别?** String是字符串常量,不可改变,对它的改动都不是在原有基础上进行,都创建了新的对象; StringBuffer与StringBuilder代表一组可以改变的字符串,StringBuffer是线程安全的(数据同步),StringBuilder是线程不安全的(数据不同步),效率高于StringBuffer,单线程操作建议使用StringBuilder *** ### Math类 **final类不能被继承** ~~~ public class MathDemo1 { public static void main(String[] args) { // 常用方法 // 1.Math.random()生成一个[0,1)的随机数 double num1 = Math.random(); double num2 = 9.9; System.out.println(Math.abs(num2)); System.out.println(Math.ceil(num2)); System.out.println(Math.floor(num2)); System.out.println(Math.max(-7, 2)); System.out.println(Math.min(-7, 2)); System.out.println(Math.round(-4.6)); } } ~~~ *** ### Date与Calendar类 ~~~ import java.util.Calendar; import java.util.Date; public class DateDemo1 { public static void main(String[] args) { // 1.java.util.Date类 Date date1 = new Date(); System.out.println(date1.getTime()); // date.getTime()得到的是从1970年1月1日00:00:00到系统当前时间经过的毫秒数字 // 2.Calendar Calendar date2 = Calendar.getInstance(); System.out.println(date2.getTime().getTime()); // set方法设置时间,注意:月份从0开始,即0代表1月 date2.set(1989,9,8,17,36,55); System.out.println(date2.getTime()); System.out.println(date2.get(Calendar.YEAR)); System.out.println(date2.get(Calendar.MONTH)); System.out.println(date2.get(Calendar.DATE)); System.out.println(date2.get(Calendar.DAY_OF_YEAR)); System.out.println(date2.get(Calendar.HOUR)); } } ~~~ ### SimpleDateFormat类 功能:字符串与日期之间的转换 ~~~ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDateFormatDemo1 { public static void main(String[] args) { // 实例化SimpleDateFormat对象 // 参数--转换格式 Date date1 = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM月-dd HH:mm:ss"); // format将Date转成String String strDate1 = sdf.format(date1); System.out.println(strDate1); // parse将String转成Date String strDate2 = "2018-4月-28 13:14:15"; try { Date date2 = sdf.parse(strDate2); System.out.println(date2); } catch (ParseException e) { e.printStackTrace(); } } } ~~~ *** #### 总结: ①Object类,它是所有类的父类 ②java.lang,不需要手动导入 ③了解equals,hashCode,toString,finalize方法 ④包装类(与字符串之间的互相转换) **包装类.toString(基本数据变量)** **包装类.valueOf(字符串)** **包装类.parseXXX(字符串)** ⑤字符串 String,StringBuffer,StringBuilder的区别? String s = "hello"与String s = new String("hello")的区别? **两个StringBuffer或两个StringBuilder比较字面量时,切记要调用toString()转成字符串常量,再调用equals方法** *** **常用方法:** equals equalsIgnoreCase substring length() charAt() trim() indexOf(),lastIndexOf() split-->返回值是一个String[] startsWith(),endsWith() append()追加--StringBuffer的方法 *** ⑥Math类 ⑦Date和Calendar日期 ⑧SimpleDateFormat日期转换类