2020-10-12Date类 Stringbuilder使用

如果早起的那只鸟没有吃到虫子,那就会被别的鸟吃掉。


String类和Object类中equals的区别

String     equals比较的是内容是否相同    “==”表示比较两个String对象的引用是否指向同一个对象  Stringz类重写了equals方法

String 举例:

https://blog.csdn.net/zhushuai1221/article/details/51417123?utm_source=blogkpcl13&utm_medium=distribute.pc_relevant.none-task-blog-title-9&spm=1001.2101.3001.4242

String str1=new String(“AAA”);

String str2=new String(“AAA”);

 boolean reasult1=str1.equals(str2);  true   equals比较的是内容是否相同

boolean result2=(str1==str2);  flase “==”表示比较两个String对象的引用是否指向同一个对象

Object类  “==”和equals用法相同 比较基本数据类型   两个值相同 结果为ture  比较两个对象引用 指向为内存中同一个对象结果为ture     

Object举例:

https://www.cnblogs.com/csslog/p/11209602.html

通过重写equals方法 来判断对象的属性值来判断对象是否相等 

public boolean equals(object obj){

return (this==obj);

}

String类中的equals方法是用来判断两个对象的内容是否相同,而Object 类中的equals方法是用来判断两个对象是否是同一个对象,所谓同一个对象指的是内存中的同一块存储空间。

String类和StringBuilder类的区别

String类不可变 StringBuilder字符串大小没有容量

一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的

(1).如果要操作少量的数据用 = String

(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

https://www.jianshu.com/writer#/notebooks/45911160/notes/71432711

1. String 类

  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。

String a = "a"; //假设a指向地址0x0001

a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。

因此String的操作都是改变赋值地址而不是改变值操作。

2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区

StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区

StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuilder

  StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。

4.线程安全

StringBuffer 线程安全

StringBuilder 线程不安全

String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响。

StringBuilder又称为可变字符序列,是JDK5.0中新增加的一个类,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。即它是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容,StringBuilder会自动维护数组的扩容

代码:

public class StringBuilder {

public static void main(String[] args) {

/**

        * 分别使用String的 += 和StringBuilder的append方法对字符串做100000次拼接,

        * 计算String拼接100000次花费时间与StringBuilder拼接100000次所花费时间并打印

        *

        * 结果证明 (单位毫秒)

        * tring所花费多少时间108

        * StringBUilder所花费多少时间2  

*/

        toString1();

        StringBuilderTest();

    }

public static void toString1(){

//系统时间

        long l = System.currentTimeMillis();

        //先定义一个字符串

        StringStr="nihao";

        //写一个循环 循环10000次

        for (int i =0; i <10000 ; i++) {

Str+="world";

        }

long l1 = System.currentTimeMillis();

        System.out.println("String所花费多少时间"+(l1-l));

    }

public static void StringBuilderTest(){

//系统时间

        long l = System.currentTimeMillis();

        //定义一个字符串

        java.lang.StringBuilder nihao1 =new java.lang.StringBuilder("nihao");

        for (int i =0; i <10000 ; i++) {

nihao1.append(i);

        }

long l1 = System.currentTimeMillis();

        System.out.println("StringBUilder所花费多少时间"+(l1-l));

    }

}


StringBuilder  方法reverse(字符序列用其翻转形式取代) append toString

public class StringArray {

public static void main(String[] args) {

//定义字符串数组

        String[] array={"010","3223","666","7890987","123123"};

        //定义一个空的字符

        java.lang.StringBuilder sb=null;

        //统计数

        int count=0;

        //判断字符串数组中是否对称if

        for (String s: array) {

sb=new java.lang.StringBuilder(s);

            /**

            * reverse 序列中包含任何替代对,则将它们视为单个字符进行反向操作

            * toString 顺序中数据的字符串

            */

            if (sb.reverse().toString().equals(s)){

count++;

            }

}

//打印数组中字符串的个数

        System.out.println("对称的个数是:"+count);

    }

}


Date 练习

重点:new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");

获取当前日期: Date date =new Date();

public class Datedemo {

public static void main(String[] args) {

//获取当前的日期

        Date date =new Date();

        //转换成是定格式的字符串

        SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");

        System.out.println(simpleDateFormat.format(date));

        //年月日

        SimpleDateFormat simpleDateFormat1 =new SimpleDateFormat("yyyy年MM月dd HH:mm:dd");

        System.out.println(simpleDateFormat1.format(date));

    }

}

Calendar日历类(由于我的网络太差 图片不能放上去 只能放代码)

public class CalendarTest {

public static void main(String[] args) {

/**

        * calender是被保护的对象 不能直接创建对象

        * 所以需要getInstance()通过该方法生成Calender对象

        * Calender日历类 年月日 时分秒日历之间的转换 提供了方法

        */

        //创建calender对象

        Calendar calender = Calendar.getInstance();

        //将给定的日历字段访日Calender对象中

        calender.set(Calendar.YEAR,2018);

        calender.set(Calendar.MONTH,1);

        calender.set(Calendar.DATE,14);

        //设置年月日

        int year = calender.get(Calendar.YEAR);

        int month = calender.get(Calendar.MONTH)+1;

        int date = calender.get(Calendar.DATE);

        //设置星期

        char week =getWeek(calender.get(Calendar.DAY_OF_WEEK));

        System.out.println(year+"年"+month+"月"+date+"日"+"是星期"+week);

    }

//定义方法 获取星期的汉字

    public static  char getWeek(int a){

char[] chars ={' ','日','一','二','三','四','五','六'};

        return chars[a];

    }

}

System类 System.arraycopy

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

/**

* src:源数组;

* srcPos:源数组要复制的起始位置;

* dest:目的数组;

* destPos:目的数组放置的起始位置;

* length:复制的长度。

* 注意:src and dest都必须是同类型或者可以进行转换类型的数组.

*/

/**

* 现有一个字符数组{'i','t','c','a','s','a'},请使用System类中的arraycopy()方法在控制台输出“itcast”。

* (提示:将[1]号数 组元素复制到最后位置并覆盖原有元素。)

* i t c a s  0 1 2 3 4 src 0      4

* - - - - - - 0 1 2 3 4 5 src 1

*        char[] chars = {'i', 't', 'c', 'a', 's', 'a'};

*        //将chars中的第2 t个元素复制到目标数组最后一为数组上

*        System.arraycopy(chars,1,chars,5,1);

*        //遍历目标数组 在控制台输出字符串

*        for (int i=0;i<=chars.length;i++){

*            System.out.println("最终输出的结果"+chars[i]);

*/


你可能感兴趣的:(2020-10-12Date类 Stringbuilder使用)