目录
1、Object类
Object是所有类的父类,所有类都继承了Object类
(1)equals
【比较的是地址】
这里要注意一点,就是我们Object这个类的值可以是任意类型,这里隐含了一个隐式转换,例如如果值是字符串,那么就转换为字符串String进行比较,就是值得比较,如果是对象类型,比较的就是对象地址,这里又一个有趣的现象就是Integer类型的值,我们看到128,是false,这是因为在小于127是从缓存中拿的值,所有是相同的,128开始就是各自new出来的对象,所以才是==的值是false(因为对于基础数据类型来说比较的都是值得比较,所以Object得隐士转换的也是对应数据类型的包装类,也就是Integer,才会有这种现象)
(2)getClass
【得到类,多用于反射】
(3)toString
【返回字符串形式】
(一般用在对象中,对象地址的输出,一般子类中会重写toString方法,让它输出子类在内存中的状态)
重写toString方法
2、String类
(1)length
【返回字符串的长度,注意这是个方法,不是属性,数组的才是属性】
(2)equals
【重写了父类Object的equals方法,比较俩个字符串的内容】
demo是 equals和==
这里注意,对于equals方法来说,比较的永远都是值。
但是==的话,String a= "hello world" 这种是如果字符串常量池中没有,那么就会在常量池中创建,然后String b = "hello world";就是从常量池中获取,所以a==b是true,而new String()这种方式,一般会创建两个,一个是在堆中创建对象,另一个就是如果字符串常量池中没有,就会在字符串常量池中创建,如果有,则不创建。所以new出来的对象==的比较,比较的是堆中的地址,所以返回的结果是false
(3)substring
【截取子字符串】
只有一个参数的话表示,从下标位置为参数值开始截取到最后一个
俩个参数,表示从第一个字符的下标开始到另一个结束字符下标的位置,左边取得到,右边取不到
(4)indexOf
【返回字符下标的位置】
这里看到我们不止可以传入字符,也可以传入字符串,也可以传入字符所对应的ascii码,也可以传第二个参数,以哪个下标开始 ,传入第一个参数的下标的位置
package com.qjx.test;
import com.qjx.entity.User;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;
import java.io.FileReader;
import java.lang.reflect.Field;
/**
* @author winnie
* @PackageName:com.qjx.test
* @Description TODO
* @date 2022/7/15 10:29
*/
public class ResourcesTest {
static final Logger logger = LoggerFactory.getLogger(ResourcesTest.class);
public static void main(String[] args) throws Exception {
String a = "hello world";
//第一个e字符所在的下标位置
System.out.println(a.indexOf('e')); //1
//第一个l字符所在的下标位置
System.out.println(a.indexOf('l')); //2
//这里是从下标4(包含4)开始,第一个l字符的所在的下标位置
System.out.println(a.indexOf('l', 4)); //9
//第一个w字符所在的下标位置
System.out.println(a.indexOf('w')); //6
//第一个world字符串所在的下标位置
System.out.println(a.indexOf("world")); //6
//从下标为7的字符开始(包含7),第一个world字符串所在的下标位置,不存在返回-1
System.out.println(a.indexOf("world",7)); //-1
//这里计算得到e的ascii码
System.out.println((int)'e'); //101
//也可以传入字符所对应的ascii
System.out.println("a.indexOf(1) = " + a.indexOf(101)); //1
}
}
(5)lastIndexOf
【最后一次出现的位置是多少】
String a = "hello world";
//最后一个字符所在的下标位置
System.out.println(a.lastIndexOf('l')); //9
System.out.println(a.lastIndexOf('l',5)); //3
System.out.println(a.lastIndexOf("wo")); //6
System.out.println(a.lastIndexOf('l',5)); //3
(6)charAt
【返回某个下标位置的字符】
(7)intern
【返回对象在字符串常量池中的对象】
下面这个demo的理解就是,String a = "hello world",是在方法区中的字符串常量池中创建了这个对象,而String b = new String("hello world")表示在堆中产生了一个对象,并且检查了字符串常量池中已经有这个对象,所以不会继续创建,所以a变量指向了常量池中的对象,b指向了堆中的对象,所以a==b为fasle,但是b.intern相当于让b也指向常量池中的对象,所以a==b.intern()为true↵
(8)split
【将字符串通过某个字符进行分割】
(9)concat
【字符串的拼接,并返回拼接后的字符串】
(10)contains
【表示是否包含某个字符或者字符串】
(11)replace
【这里表示将所有的字符替换成另一个字符,或者是所有的字符串替换成另一种字符串】
replaceFirst 表示替换第一个字符或者字符串为另一个字符或者字符串
(12)replaceAll
【表示进行替换,但是跟上面的replcace的区别就是第一个参数是正则表达式】
3、Date类
正常情况下输出的当前日期是国际化的当前日期,并不是我们熟悉的年月日时分秒格式
我们可以使用SimpleDateFormat来进行转化
4、Math类
package com.qjx.test;
import com.qjx.entity.User;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;
import java.io.FileReader;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author winnie
* @PackageName:com.qjx.test
* @Description TODO
* @date 2022/7/15 10:29
*/
public class ResourcesTest {
static final Logger logger = LoggerFactory.getLogger(ResourcesTest.class);
public static void main(String[] args) throws Exception {
System.out.println("Math.PI = " + Math.PI);//圆周率
System.out.println("Math.E = " + Math.E);//自然e
System.out.println("Math.abs(-10.5) = " + Math.abs(-10.5));//绝对值
System.out.println("Math.max(5,2) = " + Math.max(5, 2));//比较,选出最大值
System.out.println("Math.min(3.0,2) = " + Math.min(3.0, 2));//比较,选出最小值
System.out.println("Math.floor(3.1) = " + Math.floor(3.1));//小于当前值的最大整数,也就是返回3.0
System.out.println("Math.round(3.3) = " + Math.round(3.3));//四舍五入
System.out.println("Math.ceil(3.6) = " + Math.ceil(3.6));//当于当前数的最小整数,也就是返回4.0
System.out.println("Math.sqrt(4) = " + Math.sqrt(4));//根号。结果为2
System.out.println("Math.random() = " + Math.random());//随机数,拿到的数的范围是 [0.0,1.0)
System.out.println("Math.rint(2.6) = " + Math.rint(3.5));//类似于四舍五入,但是像2.5这样的数字接近2.0和3.0,会选择偶数返回
System.out.println("Math.rint(2.6) = " + Math.rint(2.5));//类似于四舍五入,但是像2.5这样的数字接近2.0和3.0,会选择偶数返回
}
}
5、Random类
【获取随机数】
6、Calendar 类
(1)获取时间
(2)自定义设置时间
月份的下标从 0 开始,设置时同样需要注意,比如我们设置倒计时的最后一秒: 2018-02-15 23:59:59
可以这样:
或者也可以单个字段一一设置:
// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());
(3)时间计算
add方法:
比如在除夕当晚最后一秒,add 一秒:
增加1s后时间会自动进入下一天
再比如 1 月 31 号的时候,月份加一,会出现怎样结果(这里注意2月只有28或者29天)
说明 add 月份时,会将不存在的日期归为当月日历的最后一天。