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