j2se学习中的一些零碎知识点5之StringBuffer类,八种基本数据类型对应的包装类型和自动装
2017-11-30 10:22
801 查看
1、StringBuffer和StringBuilder:
StringBuffer和StringBuilder是什么?是字符串缓冲区,工作原理是预先在内存中申请一块空间,以容纳字符序列;如果预留的空间不够用,则进行自动扩容,以容纳更多字符序列。
StringBuffer和StringBuilder的默认初始化容量是16。
如何优化StringBuffer和Stringuilder呢?最好在创建StringBuffer/StringBuilder之前,预测StringBuffer/StringBuilder的存储字符数量,然后在创建StringBuffer/StringBuilder的时候指定初始化容量的方式创建StringBuffer/StringBuilder,以此减少底层数组的拷贝,提高效率。
推荐字符串频繁拼接使用StringBuffer或者StringBuilder,不会创建大量的字符串对象,节省内存。
StringBuffer和StringBuilder的区别?
StringBuffer是线程安全的。(可以在多线程的环境下使用不会出现问题。)StringBuilder是非线程安全的。(在多线程的环境下使用可能会出现问题,一般采用StringBuilder,其效率较高。)
2、java中八种基本数据类型对应的包装类型:
假设m方法可以接收java中任意一种数据类型,此时调用m方法想要接收byte类型的数据,可以将byte数据先包装成java.lang.Byte;之后再传递参数。
java中包装类的继承结构图:
以java.lang.Integer类型为例,讲解八种数据类型:
关于Integer中常用的方法:
Integer、int和String三种类型的相互转换:
JDK5.0新特性:自动装箱(auto_boxing)和自动拆箱(auto_unboxing)的特性适合与JDK1.5版本之后的(包括1.5)。
3、深入自动装箱和自动拆箱:自动装箱和自动拆箱是程序编译阶段的一个概念,和程序运行无关。
自动装箱和自动拆箱主要目的是方便程序员编码。
4、关于日期类型:
获取自1970年1月1日00时00分00秒 000毫秒到当前毫秒数,long now = System.currentTimeMillis();
获取系统当前时间:Date nowTime = new Date(); System.out.println(nowTime);(java.util.Date已经重写了Object中的toString方法。)
格式化日期类型:SimpleDateFormat(java.util.Date --> String)
获取特定的日期:
StringBuffer和StringBuilder是什么?是字符串缓冲区,工作原理是预先在内存中申请一块空间,以容纳字符序列;如果预留的空间不够用,则进行自动扩容,以容纳更多字符序列。
StringBuffer和StringBuilder的默认初始化容量是16。
如何优化StringBuffer和Stringuilder呢?最好在创建StringBuffer/StringBuilder之前,预测StringBuffer/StringBuilder的存储字符数量,然后在创建StringBuffer/StringBuilder的时候指定初始化容量的方式创建StringBuffer/StringBuilder,以此减少底层数组的拷贝,提高效率。
package com.geeklicreed.j2se; public class Test { public static void main(String[] args) { //创建字符串缓冲区对象 StringBuffer sb = new StringBuffer(); //16 //可以向StringBuffer中追加字符串 String[] ins = {"体育", "音乐", "睡觉", "美食"}; for(int i = 0; i < ins.length; i++){ if(i == ins.length -1){ sb.append(ins[i]); }else{ sb.append(ins[i]); sb.append(","); } } System.out.println(sb); } }
推荐字符串频繁拼接使用StringBuffer或者StringBuilder,不会创建大量的字符串对象,节省内存。
StringBuffer和StringBuilder的区别?
StringBuffer是线程安全的。(可以在多线程的环境下使用不会出现问题。)StringBuilder是非线程安全的。(在多线程的环境下使用可能会出现问题,一般采用StringBuilder,其效率较高。)
2、java中八种基本数据类型对应的包装类型:
假设m方法可以接收java中任意一种数据类型,此时调用m方法想要接收byte类型的数据,可以将byte数据先包装成java.lang.Byte;之后再传递参数。
java中包装类的继承结构图:
以java.lang.Integer类型为例,讲解八种数据类型:
package com.geeklicreed.j2se; public class IntegerTest { public static void main(String[] args) { //获取int类型的最大值和最小值 System.out.println("int最小值:" + Integer.MIN_VALUE); //int最小值:-2147483648 System.out.println("int最大值:" + Integer.MAX_VALUE); //int最大值:2147483647 //以int推byte System.out.println("byte最小值:" + Byte.MIN_VALUE); //byte最小值:-128 System.out.println("byte最大值:" + Byte.MAX_VALUE); //byte最大值:127 //创建Integer类型的对象 Integer i1 = new Integer(10); //int -> Integer Integer i2 = new Integer("123"); //String -> Integer System.out.println(i1); //10 System.out.println(i2); //123 //以下程序编译可以通过,但是在运行的时候会报异常,数字格式化异常 //虽然可以将字符串转换成Integer类型,但是该字符串也必须是“数字字符串” Integer i3 = new Integer("abcd"); //Exception in thread "main" java.lang.NumberFormatException: For input string: "abcd" } }
关于Integer中常用的方法:
package com.geeklicreed.j2se; public class IntegerTest { public static void main(String[] args) { //int -> Integer //基本数据类型 -> 引用类型 Integer i1 = new Integer(10); //Integer -> int //引用类型 -> 基本数据类型 int i2 = i1.intValue(); //重要:static int parseInt(String s); //String -> int int age = Integer.parseInt("25"); System.out.println(age + 1); // 26 //重要:static double parseDouble(String s); double price = Double.parseDouble("3.0"); System.out.println(price + 1.0); //4.0 //将int类型的十进制转换成2进制 String binaryString = Integer.toBinaryString(10); System.out.println(binaryString); //1010 //将int类型的十进制转换成16进制 String hexString = Integer.toHexString(10); System.out.println(hexString); //a //将int类型的十进制转换成8进制 String octalString = Integer.toOctalString(10); System.out.println(octalString); //12 //int -> Integer Integer i3 = Integer.valueOf(10); //String -> Integer Integer i4 = Integer.valueOf("10"); } }
Integer、int和String三种类型的相互转换:
package com.geeklicreed.j2se; public class IntegerTest { public static void main(String[] args) { //1、int -> Integer Integer i1 = Integer.valueOf(10); //2、Integer -> int int i2 = i1.intValue(); //3、String -> Integer Integer i3 = Integer.valueOf("10"); //4、Integer -> String String s1 = i3.toString(); //5、String -> int int i4 = Integer.parseInt("123"); //6、int -> String String s2 = 10 + ""; } }
JDK5.0新特性:自动装箱(auto_boxing)和自动拆箱(auto_unboxing)的特性适合与JDK1.5版本之后的(包括1.5)。
package com.geeklicreed.j2se; public class IntegerTest { public static void main(String[] args) { //jdk5.0之前的。 //int -> Integer(装箱) Integer i1 = new Integer(10); //Integer -> int(拆箱) int i2 = i1.intValue(); //JDK5.0之后,包括5.0 Integer i3 = 10; //自动装箱 int i4 = i3; //自动拆箱 System.out.println(i3); //"10" System.out.println(i4 + 1); //11 //JDK5.0之后 m1(321); //自动装箱 System.out.println(m2(10, 5) + 1); } public static void m1(Object o){ System.out.println(o); } public static int m2(Integer i1, Integer i2){ return i1 - i2; //自动拆箱 } }
3、深入自动装箱和自动拆箱:自动装箱和自动拆箱是程序编译阶段的一个概念,和程序运行无关。
自动装箱和自动拆箱主要目的是方便程序员编码。
package com.geeklicreed.j2se; public class IntegerTest { public static void main(String[] args) { Integer i1 = new Integer(10); Integer i2 = new Integer(10); //这里不会有自动拆箱 System.out.println(i1 == i2); //false //比较两个Integer类型的数据是否相等,不能用“==” //Integer已经重写了Object中的equals方法 System.out.println(i1.equals(i2)); //true //重点 Integer i3 = 128; Integer i4 = 128; //上面的代码等同于 //Integer i3 = new Integer(128); //Integer i4 = new Integer(128); System.out.println(i3 == i4); //false //注意以下程序 //如果数据是在(-128-127之间),java中引入了一个“整型常量池”的概念,在方法区中。 //该整型常量池只存储-128-127之间的数据。 Integer i5 = 127; // 这个程序不会在堆中创建对象,会直接从整型常量池中拿。 Integer i6 = 127; System.out.println(i5 == i6); //true Integer i7 = -128; Integer i8 = -128; System.out.println(i7 == i8); //true Integer i9 = -129; Integer i10 = -129; System.out.println(i9 == i10); //false } }
4、关于日期类型:
获取自1970年1月1日00时00分00秒 000毫秒到当前毫秒数,long now = System.currentTimeMillis();
获取系统当前时间:Date nowTime = new Date(); System.out.println(nowTime);(java.util.Date已经重写了Object中的toString方法。)
格式化日期类型:SimpleDateFormat(java.util.Date --> String)
package com.geeklicreed.j2se; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { /* * 日期格式: y -> 年 M -> 月 d -> 日 H -> 小时 m -> 分 s -> 秒 S -> 毫秒 */ // 1、创建日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS"); // 2、开始格式化(Date -> String) String strTime = sdf.format(new Date()); System.out.println(strTime); } }
获取特定的日期:
package com.geeklicreed.j2se; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { String strTime = "2008年08月08日 08:08:08 888"; // 将String日期转换成日期类型Date // String -> Date // 1、创建日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:MM:ss SSS"); // 格式不能够随意 // 2、将字符串转换成日期类型 Date t = sdf.parse(strTime); System.out.println(t); // Fri Aug 08 08:00:08 CST 2008 } }
----- 5、日历Calendar类:
package com.geeklicreed.j2se; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) throws ParseException { //获取系统当前的日历 Calendar c = Calendar.getInstance(); //查看当前日历的“星期几” int i = c.get(Calendar.DAY_OF_WEEK); System.out.println(i); //4(今天是星期三)(中国的星期天,外国人看作是一个星期第一天) System.out.println(c.get(Calendar.DAY_OF_MONTH)); //1(今天是2017年11月1日) //获取2008 08 08 是星期几? //获取2008 08 08 的日历 String strTime = "2008,08,08"; Date d = new SimpleDateFormat("yyyy,MM,dd").parse(strTime); //该日历就是2008 08 08的日历 c.setTime(d); //获取星期几 System.out.println(c.get(Calendar.DAY_OF_WEEK)); //6 } } ```
相关文章推荐
- Java基础学习总结(122)——Java八种基本数据类型的包装类及其装箱拆箱详解
- javascript一些让人迷惑的地方--基本数据类型的包装对象
- Java基本数据类型与对应的包装类(动力节点java学院整理)
- (21) - 简要知识点(一) (File类,Properties类,基本数据类型的包装类)
- j2se学习中的一些零碎知识点1之基础知识
- 【JAVA学习】java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
- j2se学习中的一些零碎知识点6之DecimalFormat数字类以及java中的集合
- j2se学习中的一些零碎知识点7之流
- 一、java基本数据类型及一些需要记住的小知识点
- j2se学习中的一些零碎知识点2之基础知识
- JAVA基础 day13 String类和StringBUffer类的常用方法 基本数据类型包装类的学习
- j2se学习中的一些零碎知识点3之内部类和UML类图关系,以及软件包机制
- j2se学习中的一些零碎知识点8之多线程
- java 八种基本数据类型之与对应的封装类之间的相互转化
- Java第一课 Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。
- day13String获取判断切割替换。最大子串。StringBuffer。基本数据类型对象包装类如Integer。进制转换。自动装箱。
- 基本数据类型与它们的包装器类相互的自动装箱,自动拆箱
- java学习之旅10--基本数据类型自动转换_强制转型_类型提升问题