Java基础部分:基本的类,String,stringbuffer,stringbuilder的区别

int与Integer的不同点?

(1)int类基本数据类型,而Integer为引用数据类型

(2)int占4个字节,用于存储int类型的值,  Integer占4个字节,用于存储Integer对象的内存地址

(3)作为成员变量时,int的默认值为0,Integer的默认为null

(4)Integer使用null表示没有创建Integer对象,使用0代表已创建对象,值为0

Integer i=0;

Integer i=null;

private   int   age;   在写类的属性时,建议使用基本数据类型,因为只存"值"即可。

【2】String类

  String类中常量,其值一旦创建不能更改,只能被共享

 String str="abc";

  str="bcd";

String 类的数据结构

String 类底层所使用的数据结构为char类型的数组    ......final   value[]  

数组的特点:按索引查找元素效率比较高     charAt(int index)

                    增加和删除元素效率比较低      

      String a="hello";  String b="world"

      String c=a+b;   等号右侧有变量参与运算,所以在程序运行时,会在堆中开辟空间

StringBuffer与StringBuilder

(1)StringBuffer类的定义

public final class StringBuffer

extends Object

implements Serializable, CharSequence

通过类的定义可知,StringBuffer不允许有子类,Object类中的方法可以被重写  ,具备了两个能力

(2)StringBuffer的构造方法

StringBuffer又被称作"容器",  存储字符串。

二者的底层数据结构相同,都是使用char类型的数组

StringBuffer:  jdk1.0   ,线程安全的,效率低

StringBuilder:  jdk1.5   ,   线程不安全的,效率高

package com.bjsxt.stringbuffer;

public class TestStringBuffer {

       public static void main(String[] args) {

               //实际上创建了一个长度为16的char类型的数组

               StringBuffer sb1=new StringBuffer();

               StringBuffer sb2=new StringBuffer("hello");  //str.length()+16,char类型的数组的长度为21

               System.out.println("最大容量:"+sb2.capacity());

               //(1)append(...)可以追加任何数据类型的数据

               sb2.append("world");

               sb2.append("helloworld");

               sb2.append("world");  //25?个字符

               System.out.println(sb2);  //调用了toSring方法()

               System.out.println("最大容量:"+sb2.capacity());

               /**调用无参构造方法时,初始化char类型的数组的长度为16,带参的构造方法,实始容量为str.length()+16,

                * 如果使用append(。。)方法,向容量中添加数据时,超出了初始容量,将进行容量的自动扩充,

                * 扩充的原理是value=Arrays.copyOf(value,新容量) ,新容量=原容量*2+2   */

               System.out.println("sb2.length():"+sb2.length());

               

               //容器基本都会具备增,删,改,查的方法

               /**增:append(....) ,insert(....)

                * 删:delete(int start,int end)  deleteCharAt(int index)

                * 改:setCharAt(int index,char a) ,replace(int start,int end,String str)

                * 查:

                * */

               sb2.delete(2, 5);   //含头不含尾,将2到4的字符删除,依然是数组的拷贝,System.arraycopy(..)

               

               System.out.println(sb2);

               sb2.deleteCharAt(3);

               System.out.println(sb2);

               sb2.setCharAt(2, '中');

               System.out.println(sb2);

               sb2.replace(2, 5, "雾霾很严重");

               System.out.println(sb2);

               System.out.println(sb2.lastIndexOf("o"));

               

               System.out.println(sb2.lastIndexOf("o",10));

               sb2.insert(2, "$");  //插入

               System.out.println(sb2);

               sb2.append("你好");

               System.out.println(sb2);          
       }
}

日期和时间类

Date类:位于java.util包中

import java.util.Date;

public class TestDate {

       public static void main(String[] args) {

               Date d=new Date();

               System.out.println(d);

               System.out.println(d.toString());//重写了Object的toString方法

               System.out.println(d.getTime());//从1970-1-1  00:00:00到现在的毫秒数   
       }
}

String,StringBuffer,StringBuilder?

相同点:底层数据结构都是char类型的数组

不同点:  String是不可变的字符串,一旦声明,其值不能更改,只能被共享,  final char[] value

            StringBuffer ,StringBuilder,可变的字符串, char[] value

            StringBuffer jdk1.0    -->线程安全的,重安全,轻效率

            StringBuilder jdk1.5  -->线程不安全的,重效率,轻安全

判断容器中的个数用从capacity,length,size

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/81837086
今日推荐