常用类——Robyn编程学习(Java)

常用类

包装类的比较

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);//F(因为是两个对象)

Integer i5 = 127;//底层 Integer.valueOf(127)
Integer i6 = 127;//-128~127
System.out.println(i5 == i6); //T(底层自动创建了对象,就不需要再创建对象了)

Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);//F(超过128就又是两个不同的对象了)

Integer i13=128;
int i14=128;
System.out.println(i13==i14);//T(只要有基本数据类型,都会自动装箱,判断的是值是否相同)

String类

String类的两种创建形式的区别

String a = "abc";
String b = "abc";
a.equals(b);T(值是否相同)
a == b;T(地址是否相同)
(因为指向的都是常量池中的字符串) 
    
String a = new String("abc");
String b = new String("abc");
a.equals(b):true
a == b;False(因为两个对象地址不相同)    

补充一下包装类的装箱方法
包装类赋值其实就是调用包装类的Valueof()方法,换句话说就是指装箱方法。
除了Float和Double两个数据类型外,其他数据类型都会缓存
具体数据类型的缓存范围可参考:
包装类的缓存特性

字符串的特性

String a = "hello";
String b = "abc";
String c = a + b;
//可以看到底层代码是创建了一个StringBuilder对象,然后再分别用append方法添加,最后创建了一个String对象输出(也就是说总共创建了3个对象)

重要规则:常量相加,看的是常量池中的相加,变量相加,看的是堆中的相加。

StringBuffer和StringBuilder

String与StringBuffer的区别就是String直接指向的是常量,因此更改就是更改地址,而StringBuffer指向的是堆中的对象,因此更改内容可以直接更改。

由于StringBuffer中有线程锁,因此没有StringBuilder效率高,但是如果是单线程的话,完全可以优先采用StringBuilder

日期类

第三代日期类的使用

LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
//构建一个字符串的格式
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//字符串的格式拼接
String format = dateTimeFormatter.format(ldt);
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());

反转字符串

 //方法2:拆分为字符串数组用索引替换
    public static String reverse2(String str,int start,int end){
        String s = "";
        char temp =' ';
        char[] str1 = str.toCharArray();
        for (int i = start,j = end; i < j ; i++,j--) {//这里用了一个找规律的,也很奥妙,属于算法的雏形了
            temp = str1[i];
            str1[i] = str1[j];
            str1[j] = temp;
            System.out.println(str1[i]);
        }
        return new String(str1);
    }
    //方法1:用stingbulider类来做
    public static String reverse(String str,int start,int end){
        String s = "";
        for (int i = start; i < end + 1; i++) {
             s =str.charAt(i) + s;
        }
        StringBuilder stringBuilder = new StringBuilder(str);
        StringBuilder replace = stringBuilder.replace(start, end + 1, s);
        return  replace.toString();;
    }

一种方式是使用字符串转化为数组,然后找规律用指针替换,一种是直接包装为StringBuilder类,我认为这两种方法都比较适用。

posted @ 2022-10-30 12:17  深海之燃  阅读(26)  评论(0)    收藏  举报