1、基本数据类和引用数据类型
八种基本数据类型有对应的包装类型,认识基本数据类型与包装类型之间的转化。同时知道数组转化为 字符串,以及将字符串转化为数值类型。
装箱:将基本数据类型转化为包装类型称之为装箱
int i = 500; Integer t = new Integer(i);
Float f = new Float(“4.56”);
拆箱:将包装类型转化为基本数据类型称之为拆箱
boolean b = bObj.booleanValue();
字符串转换成基本数据类型
通过包装类的构造器实现:int i = new Integer(“12”);
通过包装类的parseXxx(String s)静态方法:Float f = Float.parseFloat(“12.1”);
基本数据类型转换成字符串 调用字符串重载的valueOf()方法:String fstr = String.valueOf(2.34f);
更直接的方式:String intStr = 5 +
2、String类
String类代表字符串。Java程序中的所有字符串字面值都是此类的实例实现。String类是一个final 类,代表不可变的字符串。字符串是常量,用双引号引起来表示。他们的值在创建后不能更改。Sting对 象的字符串内容是存储在一个字符数组value[]中的。String如果直接赋值,是将字符串保存到方法区中 的常量池中。如果new,会在堆中,然后堆再指向方法区常量池中的字符串。字符串存储再常量池中的目 的是共享。只要其中有一个是变量,结果就在堆中
结论: 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量. 只要其中有一个是变量,结果就在堆中 如果拼接的结果调用intern()方法,返回值就在常量池中 String s1 = "a"; 说明:在字符串常量池中创建了一个字面量为"a"的字符串。 s1 = s1 + "b"; 说明:实际上原来的“a”字符串对象已经丢弃了,现在在堆空间中产生了一个字符串s1+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响 程序的性能。 String s2 = "ab"; 说明:直接在字符串常量池中创建一个字面量为"ab"的字符串。 String s3 = "a" + "b"; 说明:s3指向字符串常量池中已经创建的"ab"的字符串。 String s4 = s1.intern(); 说明:堆空间的s1对象在调用intern()之后,会将常量池中已经存在的"ab"字符串赋值给s4。
字符串常用方法
int length():返回字符串的长度: return value.length char charAt(int index): 返回某索引处的字符return value[index]boolean isEmpty():判断是否是空字符串:return value.length == 0 String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写 String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写 String trim():返回字符串的副本,忽略前导空白和尾部空白 boolean equals(Object obj):比较字符串的内容是否相同 boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写 String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+” int compareTo(String anotherString):比较两个字符串的大小 String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。 boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始 boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始 boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列 时,返回 true int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引 int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引 int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 注:indexOf和lastIndexOf方法如果未找到都是返回-1 String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有 oldChar 得到的。 String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 String replaceAll(String regex, String replacement) : 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。 String replaceFirst(String regex, String replacement) : 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。 boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。 String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。 String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个
String特点:
String:字符串,使用一对""引起来表示。 1.String声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 3.String内部定义了final char[] value用于存储字符串数据 4.String:代表不可变的字符序列。简称:不可变性。 体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。 2. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。 3. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。 5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。 6.字符串常量池中是不会存储相同内容的字符串的。
3、StringBuffer类
java.lang.StringBuffer代表可变的字符序列,JDK1.0中声明,可以对字符串内容进行增删,此时不会产 生新的对象。很多方法与String相同。作为参数传递时,方法内部可以改变值。
StringBuffer类不同于String,其对象必须使用构造器生成。有三个构造器:
扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来容量的2倍 + 2,同时将原有数组中的元素复制到新的数组中。
指导意义:开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity)
StringBuffer():初始容量为16的字符串缓冲区 StringBuffer(int size):构造指定容量的字符串缓冲区 StringBuffer(String str):将内容初始化为指定字符串内容
StringBuffer常用的方法
StringBuffer append(xxx)://提供了很多的append()方法,用于进行字符串拼接 StringBuffer delete(int start,int end)://删除指定位置的内容 StringBuffer replace(int start, int end, String str)://把[start,end)位置替换为str StringBuffer insert(int offset, xxx)://在指定位置插入xxx StringBuffer reverse() ://把当前字符序列逆转
4、StringBuilder类
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且提供相关功能的方法也一样 面试题:对比String、StringBuffer、StringBuilder
String(JDK1.0):不可变字符序列
StringBuffer(JDK1.0):可变字符序列、效率低、线程安全
tringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全
注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。
String、StringBuffer、StringBuilder三者的异同?
String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储。
5、日期类型
1>System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之 间以毫秒为单位的时间差。此方法适于计算时间差。
2>java.util.Date类
Date():使用无参构造器创建的对象可以获取本地当前时间。
Date(long date):
常用的方法:
getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
toString():把此 Date 对象转换为以下形式的 String: dow mon ddhh:mm:ss zzz yyyy 其中: dow 是 一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准
3>SimpleDateFormat类
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有 关的方式来格式化和解析日期的具体类。
它允许进行格式化:日期文本、解析:文本日期
格式化: SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个 对象,该对象调用:
public String format(Date date):方法格式化时间对象date
解析: public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期
4> java.util.Calendar(日历)类
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法
使用Calendar.getInstance()方法 调用它的子类GregorianCalendar的构造器。
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如 YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
public void set(int field,int value)
public void add(int field,int amount)
public final Date getTime()
public final void setTime(Date date)
注意
获取月份时:一月是0,二月是1,以此类推,12月是11
获取星期时:周日是1,周二是2 , 。。。。周六是7
5>Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。
6>BigInteger与BigDecimal
Integer类作为int的包装类,能存储的最大整型值为2 31-1,Long类也是有限的,最大为2 63-1。如果要 表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本 整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模 算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
构造器 BigInteger(String val):根据字符串构建BigInteger对象
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。 BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。 BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。 BigInteger pow(int exponent) :返回其值为 (thisexponent) 的BigInteger。
7>BigDecimal类
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高, 故用到java.math.BigDecimal类。BigDecimal类支持不可变的、任意精度的有符号十进制定点数。