1.String 类
1.1 每一个字符串是String类的一个匿名对象,可以直接去调用String类的方法,
匿名对象也是一种对象,但是因为没有对象名,所以只能使用一次,
例如: ”abc“.endswith("c")
1.2 String 类对象实例化格式
String str="abc";//直接赋值,不同的对象名相同的内容时共享一个堆内存空间
String str=new String("abc"); //通过String类构造方法实例化,不管内容是否相同都会开辟一个新的内存空间
1.3 字符串的内容不可改变
String str="hello";
str=str+" world";
"hello"开辟一个堆内存空间," world"开辟一个堆内存空间 ”hello world“ 开辟一个堆内存空间
总共开辟了3个堆内存空间
str只开辟了一个栈内存空间,str内容改变是通过断开与原堆内存的连接与新的堆内存连接来完成
3个堆内存空间里面的字符串没有改变;
注意:因为字符串的内容不可改变性,所以要尽量避免循环使用类似于str=str+" world"这样的语句
因为这将会开辟很多新的堆内存空间,效率非常低下。
1.4 字符串共享性:
String类对象直接赋值时,若字符串内容可以在现有的堆内存中找到,则直接去引用该堆内存,
而不再去开辟新的堆内存空间;
1.5 String类中equals与==的区别(String类下面的比较)
equals()方法只比较两个String对象的内容是否相同;
==比较两个String对象的内容及堆内存地址是否相同;
例如:String str="abc";
String str1=new String("abc");//新开辟一个堆内存
str==str1 //结果为false,因为两个对象堆内存地址不同
str.equals(str1)//结果为true,因为两个对象内容相同
1.6 String StringBuilder StringBuffer的区别:
1.String 存储字符串的字符数组是final修饰的,一旦赋值则字符数组的内容及长度都固定不变
使用String拼接字符串效率极其低下,多次拼接的话强烈推荐使用StringBuilder/StringBuffer
2.StringBuilder StringBuffer存储字符串的字符数组没有final修饰,它的内容长度都是可变的
3.StringBuilder扩展字符串序列的方法是不保证同步执行的,一般在单线程时优先使用,因为它
的效率一般比StringBuffer要快,它是JDK5.0之后为StringBuffer单线程使用时补充的一个等价类
4.StringBuffer扩展字符串序列的方法是保证同步执行的,一般是在多线程要求同步的时候,它的
效率一般比StringBuffer要慢
OutOfMemoryError JVM内存溢出异常
java.lang.Runtime类可以查看JVM内存使用状态
2.日历类
2.1 Date
常用方法getTime(),可用于测试大程序的运行时间
2.2 Calendar
注意:Calendar类对象不能使用new Calendar()的方法去实例化,
只能用Calendar 对象名=Calendar.getInstance()方法去实例化对象
2.2.1 方法setTime(Date date) 设置当前系统时间为date
2.2.2 方法getTime(Date date) 获取当前系统时间,返回类型为Date
2.2.3 方法getActualMaximum(Calendar字段) 返回字段可能存在的最大值
2.3格式化日期表示格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //定义格式
sdf.format(Date date);//将参数date按事先定义的格式去格式化
sdf.parse(String str);将String类型改成Date类型,str的格式要与sdf定义的格式一致
注意:Calendar中get(int field)及set(int field)方法的int参数有效范围为0-16
若参数超出则出现数组下标越界异常,
这两个方法的本质实际上是将以下17个字段的值保存在fields数组中,通过get及Set的
方法查询或修改数组fields中指定位置的值,方法参数其实是fields中的下标;
0-16分别表示以下常量字段:
final static int ERA=0 //声明字段ERA在数组int fields[]中的下标
final static int YEAR=1
final static int MONTH=2
final static int WEEK_OF_YEAR=3
final static int WEEK_OF_MONTH=4
final static int DAY_OF_MONTH=5
final static int DATE=6
final static int DAY_OF_YEAR=7
final static int DAY_OF_WEEK=8
final static int DAY_OF_WEEK_IN_MONTH=9
final static int AM_PM=10
final static int HOUR=11
final static int HOUR_OF_DAY=12
final static int MINUTE=13
final static int SECOND=14
final static int MILLISECOND=15
final static int ZONE_OFFSET=16
final static int DST_OFFSET=17
1.1 每一个字符串是String类的一个匿名对象,可以直接去调用String类的方法,
匿名对象也是一种对象,但是因为没有对象名,所以只能使用一次,
例如: ”abc“.endswith("c")
1.2 String 类对象实例化格式
String str="abc";//直接赋值,不同的对象名相同的内容时共享一个堆内存空间
String str=new String("abc"); //通过String类构造方法实例化,不管内容是否相同都会开辟一个新的内存空间
1.3 字符串的内容不可改变
String str="hello";
str=str+" world";
"hello"开辟一个堆内存空间," world"开辟一个堆内存空间 ”hello world“ 开辟一个堆内存空间
总共开辟了3个堆内存空间
str只开辟了一个栈内存空间,str内容改变是通过断开与原堆内存的连接与新的堆内存连接来完成
3个堆内存空间里面的字符串没有改变;
注意:因为字符串的内容不可改变性,所以要尽量避免循环使用类似于str=str+" world"这样的语句
因为这将会开辟很多新的堆内存空间,效率非常低下。
1.4 字符串共享性:
String类对象直接赋值时,若字符串内容可以在现有的堆内存中找到,则直接去引用该堆内存,
而不再去开辟新的堆内存空间;
1.5 String类中equals与==的区别(String类下面的比较)
equals()方法只比较两个String对象的内容是否相同;
==比较两个String对象的内容及堆内存地址是否相同;
例如:String str="abc";
String str1=new String("abc");//新开辟一个堆内存
str==str1 //结果为false,因为两个对象堆内存地址不同
str.equals(str1)//结果为true,因为两个对象内容相同
1.6 String StringBuilder StringBuffer的区别:
1.String 存储字符串的字符数组是final修饰的,一旦赋值则字符数组的内容及长度都固定不变
使用String拼接字符串效率极其低下,多次拼接的话强烈推荐使用StringBuilder/StringBuffer
2.StringBuilder StringBuffer存储字符串的字符数组没有final修饰,它的内容长度都是可变的
3.StringBuilder扩展字符串序列的方法是不保证同步执行的,一般在单线程时优先使用,因为它
的效率一般比StringBuffer要快,它是JDK5.0之后为StringBuffer单线程使用时补充的一个等价类
4.StringBuffer扩展字符串序列的方法是保证同步执行的,一般是在多线程要求同步的时候,它的
效率一般比StringBuffer要慢
OutOfMemoryError JVM内存溢出异常
java.lang.Runtime类可以查看JVM内存使用状态
2.日历类
2.1 Date
常用方法getTime(),可用于测试大程序的运行时间
2.2 Calendar
注意:Calendar类对象不能使用new Calendar()的方法去实例化,
只能用Calendar 对象名=Calendar.getInstance()方法去实例化对象
2.2.1 方法setTime(Date date) 设置当前系统时间为date
2.2.2 方法getTime(Date date) 获取当前系统时间,返回类型为Date
2.2.3 方法getActualMaximum(Calendar字段) 返回字段可能存在的最大值
2.3格式化日期表示格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //定义格式
sdf.format(Date date);//将参数date按事先定义的格式去格式化
sdf.parse(String str);将String类型改成Date类型,str的格式要与sdf定义的格式一致
注意:Calendar中get(int field)及set(int field)方法的int参数有效范围为0-16
若参数超出则出现数组下标越界异常,
这两个方法的本质实际上是将以下17个字段的值保存在fields数组中,通过get及Set的
方法查询或修改数组fields中指定位置的值,方法参数其实是fields中的下标;
0-16分别表示以下常量字段:
final static int ERA=0 //声明字段ERA在数组int fields[]中的下标
final static int YEAR=1
final static int MONTH=2
final static int WEEK_OF_YEAR=3
final static int WEEK_OF_MONTH=4
final static int DAY_OF_MONTH=5
final static int DATE=6
final static int DAY_OF_YEAR=7
final static int DAY_OF_WEEK=8
final static int DAY_OF_WEEK_IN_MONTH=9
final static int AM_PM=10
final static int HOUR=11
final static int HOUR_OF_DAY=12
final static int MINUTE=13
final static int SECOND=14
final static int MILLISECOND=15
final static int ZONE_OFFSET=16
final static int DST_OFFSET=17