String等常用类

目录

1、Object类

(1)equals

(2)getClass

(3)toString

2、String类

(1)length

(2)equals

(3)substring

(4)indexOf

(5)lastIndexOf

(6)charAt

(7)intern

(8)split

(9)concat

(10)contains

(11)replace

(12)replaceAll

3、Date类

4、Math类

5、Random类

6、Calendar 类

(1)获取时间

(2)自定义设置时间

(3)时间计算


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 月份时,会将不存在的日期归为当月日历的最后一天。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值