java基础笔记5

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

猜你喜欢

转载自blog.csdn.net/wu1317581750/article/details/81187501
今日推荐