Java基础(Day5)

一、字符串 String

1.1 声明字符串

字符串(本质:字符的数组)  String    引用数据类型   默认值:null(可不是“” 哦)

 String str="巴拉巴拉";
        str=new String();
        str=new String ("巴拉巴拉");

        char[]arr={'a','b','c',97};
        str=new String(arr);
        System.out.println(str);//abca

        //valueOf  ParseInt
        String s = String.valueOf(12);
        System.out.println(s);//12

1.2 字符串的拼接

  • 加号在做字符拼接和数学运算时,优先级是一样的
    字符串和任何类型相加之后类型都是字符串
  • 加号 +  使用

(1)加法运算:

  • 隐式转换:byte,short,char—> int (byte,short,char三种类型在参与运算时,会先提升为int类型,再进行运算)
  • 强制转换:取值范围大的转换成取值范围小的数据,是不允许直接赋值的,需要强制转换。

(2)字符串 “+” 操作:

  • 当“+”操作中含有字符串时,“+”就不是算术运算符,而是一个拼接符;
  • "123"+123 结果:"123123"
  • 连续“+”操作时,从左到右依次执行; 1+99+“年黑马” 结果:“100年黑马”

(3)字符“+”操作:

  • 当字符+字符或字符+数字时,就会把字符通过ASCII码表转换成相应数字,进行计算。
  • A~Z的ASCII码值从65~90; a~z的ASCII码值从97~122

  • 1+“a" 结果为:98

  • “a"+"abc" 结果为:“aabc"(此处出现字符串,应该是拼接符)

1.3  Arrays.toString

str ="123"+new Object();//123+这个对象Tostring(默认地址)的结果
        System.out.println(str);//123java.lang.Object@1b6d3586
     // str ="123"+"abc";
        str ="123"+new int[] {1,2,3};
        System.out.println(str);//123[I@4554617c

1.4 String 类型常用方法

  •      * valueOf:把传入参数转成字符串类型
         * indexOf:查找字符/子串出现的位置
         *       ---字串中第一个字符出现的位置,找不到字串返回-1
         * charAt():获取指定位置的字符
         * subString():截取字符串
         * replace():替换(出现即替换)
         * replaceAll():替换(采用正则表达式)
         * split():分割字符串
         * length():获取字符串长度
         * trim():去除前后空白位(空格 \n  \r  \t ),无法去掉中间空白位
         * toUpperCase():大写(针对字母)
         * toLowerCase():小写(针对字母)
         * isEmpty():判断是否是空
         * starsWith():以什么开头:
           endsWith(): 以什么结束
  • 注意点:
    是分割还是还是截取,原字符串没有改变(不可以改变的),产生的是新的变量
  • valueOf()
    String.valueOf('1');
         String.valueOf(new Object());
         String.valueOf("");
    
    就近原则---选择String  而不是Object
     //valueOf内部参数列表定义 object 与string ,string更精确,就近选string
         //String.valueOf(null);
    
    //就近原则---选择String  而不是Object
         test(null);
    
    public static void test(String strs){
      System.out.println("1111111");
     }
     public static void test(Object obj ){
      System.out.println("2222222");
     }
    
    }

//indexOf:查找字符/子串出现的位置
     //     *       ---字串中第一个字符出现的位置,找不到字串返回-1
     int indext="123456".indexOf("34");//返回3的下标---2
     System.out.println(indext);
     indext="123123123".indexOf("1");//0--找到第一个停止
     indext="123123123".lastIndexOf("1");//6---倒着找第一个


     //charAt():获取指定位置的字符
     char c = "12345".charAt(4);//3
     System.out.println(c);

/*     char c1 = "12345".charAt(8);
     System.out.println(c1);//StringIndexOutOfBoundsException*/

     //subString():截取字符串
     "1234567".substring(1);//从下标为1开始截取,直到最后
     "1234567".substring(1,4);//截取下标范围:[1,4)---不能为substring(1,7):越界

     //replace():替换--有就替换
     "123456".replace("34","aa");//12aa56

     //replaceAll():
     //regex:正则表达式  .表示任意字符
     "12.31.23".replaceAll(".","a");//aaaaaaaa

     //split():分割字符串
     String[] split = "123123123".split("2");//根据2分割字符串
     System.out.println(Arrays.toString(split));//[1, 31, 31, 3]

     String[] split1 = "123123123".split("1");
     System.out.println(Arrays.toString(split1));//[, 23, 23, 23]

     String[] split2 = "231231231".split("1");
     System.out.println(Arrays.toString(split2));//[23, 23, 23]

     //length():获取字符串长度

     //trim():去除前后空白位(空格 \n  \r  \t )无法去掉中间空白位
     String trim = "\n\r123 1 3".trim();
     System.out.println(trim);//123 1 3

     //大写小写(针对字母)
     String s2 = "123abc".toUpperCase();//
     System.out.println(s2);//123ABC

     String s3 = "123abcABC".toLowerCase();//
     System.out.println(s3);//123abcabc

     //判断是否是空
     boolean empty = "123".isEmpty();//是空串返回true
     System.out.println(empty);//false
     if(!str.isEmpty()){
      //str 不为空进行相关操作

      //S以什么开头: starsWith()
      //以什么结束: endsWith()

      boolean b = "123".startsWith("1");//true
      boolean b1 = "123".endsWith("0");//false

     }

1.5 intern()

  • 返回stA在字符串常量池的副本对象
  • 过程:检查stA是否在字符串常量池中存在副本,如果不存在就复制一份并存入到常量池中,
    * 然后返回常量池中的副本对象,如果已经存在副本对象,直接返回副本对象
    *
    * 所以如果两个字符串equals为true---内容一样,
    * 那么两个字符串的intern的方法是相等的
    String s1 = new String("123123");
            String s2 = new String("123123");
            System.out.println(s1==s2);//false
            System.out.println(s1.equals(s2));//ture
            System.out.println(s1.intern()==s2.intern());//true  都返回常量池副本对象
    
    

1.6  字符串常量池

  • 程序中第一次使用量的形式定义“123”字符串,会将这个字符串对象存入到字符串常量池中
    //之后使用量的形式使用该对象,就直接使用常量池的对象
  • String 对象定义后不可改变
    //可视为常量---private final char value[]
    //数组长度不可以改变--字符串长度不可以改变
    
    /*字符串常量池(容器)---方便字符串重用
    * 字符串怎样加入到字符串常量池:使用量(双引号引起来的)的方式声明的字符串就会加入到常量池中*/
  • 笔试题!!!!!!!!!!!!!!!!!!!
    
            //笔试题
            String strC=new String("123");
            String strD=new String("123");
            System.out.println(strA==strC);//false strC是new出来的是独立的
            System.out.println(strC==strD);//false strC和strD都是new出来的,不相同
    
            String strE="12"+"3";
            String strF="1"+"2"+"3";
            String item="12";
            String strG=item+"3";
            String strGG=item+3;
            System.out.println(strG==strGG);//false 都是运行之后才知道结果
            String strH="12"+3;
            System.out.println(strA==strE);//true  在前面解析过程中strE已经明确为”123“
            System.out.println(strA==strF);//true
            System.out.println(strE==strF);//true
            System.out.println(strA==strG);//false
            // item是一个变量,不确定的量,在解析时无法确定G是”123“
    
            System.out.println(strA==strH);//true
            System.out.println(strG==strC);//false
    
            final String aa="12";//final常量,不可变的量,就可以明确值可以优化
            String strI=aa+"3";
            System.out.println(strA==strI);//true
    
            String bb=new String("12");
            //'  String("12") '是构造方法,要运行出来以后才能知道结果
            String strJ=bb+"3";
            System.out.println(strA==strJ);//false
  •        //量的形式
            int a=12;
            String s="123";
            Integer.valueOf("23");
    
           //不是量的形式 ????????????????????
            char[] arr={'a','b','c'};
            s=new String(arr);//不会加入常量池
    
      //程序运行时:就已经编译成abc12的形式,程序没有运行时连常量池都没有
            //new String ("abc"+“12”)  创建1个或2个对象(看常量池是否有副本)
            //new String ("abc12”)

    1.7  StringBuilder StringBuffer

  • 存在的意义:
    追加--调用append 就是往StringBuilder数组中追加字符,没有产生字符串对象
  • 在拼接字符串的时候不要产生中间串 --可变性字符串
  • StringBuilder 与 StringBuffer 的区别
    线程安全:StringBuilder 不是线程安全的,而 StringBuffer 是线程安全的。StringBuilder 类的方法没有同步(synchronized),因此在多线程环境下,它的性能通常比 StringBuffer 更好。
    
    性能:StringBuilder 通常比 StringBuffer 具有更高的性能,因为它没有同步开销。
    
    其他方面,如可变性、方法和用法,StringBuilder 与 StringBuffer 非常类似。
    
  • StringBuilder(默认容量 :16)怎么进行扩容:
      追加字符数容量不够就需要扩容,默认:原来容量*2+2
      如果还不够需要多少就扩到多少
  • 补充:数组扩容
    System.arraycopy(src,0,st,0,9);
    把src(从下标为0开始) 粘贴到St(从下标为0开始) 长度为9

1.8  Objects对象

        boolean aNull = Objects.isNull(null);//true
        boolean equals = Objects.equals(strB, null);//false/

二、随机数

2.1 随机数 random

  • 切记  左闭右开
//随机数 random
        double random = Math.random();//[0,1)
        //[8,90)
        double v = random * 82 + 8;

2.2 随机数对象 Random ---假随机(需要一个种子)

  • 种子相同时随机数也会相同
  • 如果不传入种子,就会将时间戳作为种子

可以设置最大值范围

 //随机数对象 Random---假随机(需要一个种子)
        Random random1=new Random(12);
        Random random2=new Random(12);
        int i = random1.nextInt();//获取随机数
        int i1 = random2.nextInt();//
        System.out.println(i+"------"+i1);//-1160101563-------1160101563
         i = random1.nextInt();//获取随机数
         i1 = random2.nextInt();//
        System.out.println(i+"------"+i1);//256957624------256957624
     //如果不传入种子,就将时间戳作为种子
        i = random1.nextInt(200);//设定最大值为200
        i1 = random2.nextInt(200);//
        System.out.println(i+"------"+i1);//156------156

2.3 四舍五入 round    向上取整 ceil   向下取整--floor

        v=12.5;
        //取整---long(取整,整数最大就是long)
        //四舍五入--round
        //输入doubl --》long  输入float--》int

        long num=Math.round(v);//13
        int round = Math.round(12.33f);
        System.out.println(Math.round(0.5));//1
        System.out.println(Math.round(-0.4));//0
        System.out.println(Math.round(-0.5));//0`1
        System.out.println(Math.round(-1.5));//-1
        System.out.println(Math.round(-1.8));//-2

        //向上取整--ceil
        double ceil = Math.ceil(v);//13
        //向下取整--floor
        double floor = Math.floor(v);//12


三、Date 

  • long 表示时间:从1970-1-1 00:00:00 开始 每一毫秒加
    
          //获取当前时间---执行代码time
            Date date =new Date();
            System.out.println(date);
    
            Date date1 =new Date(0);
            System.out.println(date1);//Thu Jan 01 08:00:00 CST 1970
    

3.1  获取时间戳:getTime()


        //getTime():获取时间戳
        long time=date.getTime();
        System.out.println(time);//毫秒现今累加--1721284513590

        //设置两天后的时间
        time=time+2*24*60*60*1000;
        date =new Date (time);
        System.out.println(date);//Sat Jul 20 14:38:53 CST 2024
  • 补充:获取月份(月份返回0-11)  getMonth()
  • 获取分钟0-59,但是日期就按照实际习惯(其他均是)

3.2 时间格式化 

  • 对象  SimpleDateFormat
  • 方法  format
  • 补充:12制 hh             24 制 HH
             //时间格式化
            //12小时制:hh    24 : HH
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd :HH:mm:ss");
            String format = sdf.format(date);
            System.out.println(format);//2024-07-20 :14:45:07
    

    3.3  显示本地时间

  • 本地时间--不记录时区   LocalDateTime.now();
  • 本地时间--记录时区   ZonedDateTime.now()
  • 显示时区 (计算机默认东八区  上海) zdt.getZone()
  •         //本地时间--不记录时区
            LocalDateTime ldt=LocalDateTime.now();
            System.out.println(ldt);//2024-07-18T14:52:37.783
            //本地时间--记录时区
            ZonedDateTime zdt= ZonedDateTime.now();
            System.out.println(zdt);//2024-07-18T14:52:37.784+08:00[Asia/Shanghai]
    
            ZoneId zone = zdt.getZone();
            System.out.println(zone);//时区 Asia/Shanghai

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值