目录
2.2.3 StringBuffer和StringBuilder
常用类(一)
1. 基本数据类型包装类
1.1 八大基本数据类型的包装类
对于上图有以下几点需要注意:
1.java八种基本数据类型分为四类八种,四类分别为整型、浮点型、布尔型、字符型;八种分别为byte、short、int、long、float、double、boolean、char;
2.java八种基本数据类型的字节数:分别为1、2、4、8个字节;1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double);
3.整数的默认类型为int,浮点数的默认类型为double;
4.八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写
5.关于值的范围问题,需要注意char类型是无符号的,不能为负,所以是0开始的;
1.2 包装类的层次结构
java是一门面向对象的语言,但有8种基本数据类型不具备面向对象的特征,使用起来不方便,所以为这八种基本数据类型提供了对应的包装类,我们可以这样记忆:
1.对应包装类比较特殊的就是int对应Integer,char对应Character,
2.包装类对应的父类Boolean和char对应的是Object,其他的面向对象的父类也是Object,前六个包装类的父类都为Number;
1.3 包装类中的常用方法
一.静态方法valuOf()
如果参数为基本数据类型,返回包装类对象,参数为String字符串(Character类没有以String为参数的方法),返回包装类对象
举例:
package com.feisi0414; public class Work { public static void main(String[] args) { Integer i=Integer.valueOf(10); System.out.println(i); Integer a = Integer.valueOf("100"); System.out.println(a); } }
二.静态方法parse000(000对应基本数据类型)
注意的是1.Character类没用该方法 2.作用:把字符串类型转换为基本数据类型
举例:
package com.feisi0414; public class Work { public static void main(String[] args) { Integer a = Integer.parseInt("100"); System.out.println(a); } }
1.4 自动装箱和自动拆箱
1、 自动装箱:可以直接把一个基本数据类型赋值给包装类
例如: Double d = 3.3; //自动装箱操作
2、 自动拆箱:可以直接把一个包装类对象,赋值给基本类型
例如:int a = new Integer(3); //自动拆箱。
自动装箱和自动拆箱,简化了对包装类的操作。
2. 字符串相关类
2.1 String的特点
2.1.1 字符串的实例化
String对象实例化有两中:
一种是直接赋值(String str = “abc”; )
另一种是通过构造方法完成,(String str = new String(“abc”); )
直接赋值:只开辟一个堆内存空间,而且采用了共享设计模式,可以自动的入池,以备下次对象继续使用;
构造方法:会开辟两块内存空间,其中有一块空间将成为垃圾,而且不会自动入池,但是可以使用intern()方法进行手工入池;
从开发角度而言,很明显使用直接赋值的方式会更好一些
2.1.2 字符串的比较
1、”==”表示判断该两个字符串是否为同一对象,即在内存中的地址是否一样。如果一样则返回true 否则返回false; 和我们通常的是否为同一对象的是一样的。
举例:
public class CompareUsingEquals {
public static void main(String[] args) {
String firstString = "coderolls";
String secondString = "javablog";
String thirdString = "coderolls";
String fourthString = "CodeRolls";
System.out.println("comparing strings using equals() and equalsIgnoreCase() method\n");
System.out.println(firstString.equals(secondString));
System.out.println(firstString.equals(thirdString));
System.out.println(firstString.equalsIgnoreCase(fourthString));
}
}
2、boolean equals(ObjectanObject) 将此字符串与指定的对象比较。注意此时比较的是内容是否相等(字符串类对此方法进行了覆写)。
举例:
public class CompareUsingEquals {
public static void main(String[] args) {
String firstString = "coderolls";
String secondString = "javablog";
String thirdString = "coderolls";
String fourthString = "CodeRolls";
System.out.println("comparing strings using equals() and equalsIgnoreCase() method\n");
System.out.println(firstString.equals(secondString));
System.out.println(firstString.equals(thirdString));
System.out.println(firstString.equalsIgnoreCase(fourthString));
}
}
2.1.3字符串的不可改变
字符串的内容一旦申明,就不能被改变
做类似于+=的操作后,实际上是指向了新的地址,原来的空间里面的内容还是没有改变
如果字符串内容经常发生改变,建议使用StringBuffer
2.1.4 字符串的常用方法
2.2 StringBuffer类
2.2.1 为什么使用StringBuffer类
字符串的不变性:
-
一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符到String对象中。
-
您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String对象。
-
如果程序对这种附加字符串的需求很频繁,系统会频繁在内存中创建String对象,造成性能下降。所以并不建议使用+来进行频繁的字符串串联。应该使用java.lang.StringBuffer类。
2.2.2 StringBuffer的使用
举例:
举例:
package com.feisi0414; import java.util.Scanner; public class Test02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String st = sc.next(); StringBuffer sb =new StringBuffer(); char []arrs = st.toCharArray(); if (arrs.length==8){ for (int i = 0; i <arrs.length ; i++) { if (Character.isUpperCase(st.charAt(i))){ sb.append('M') ; }else { sb.append(st.charAt(i)); } } System.out.println("新字符串是:"+sb); }else { System.out.println("输入错误"); } } }
长度经常变化的字符串,可以考虑使用StringBuffer
//建议长度经常变化的字符串,采用StringBuffer
StringBuffer buffer = newStringBuffer();
buffer.append("hello");
buffer.append("world");
2.2.3 StringBuffer和StringBuilder
StringBuilder与StringBuffer的用法完全一致,唯一的区别是StringBuffer是线程安全的,而StringBuilder不是线程安全的。所以StringBuilder的性能要比StringBuffer要好。
单线程推荐使用StringBuilder,多线程使用StringBuffer。
3. Math类
3.1 Math类的常量和常用方法
特点:
1.Math 类提供了一序列基本数学运算和几何函数的方法。
2.Math类是final类,并且它的所有成员变量和成员方法都是静态的。
3.2 静态导入(了解)
语法:import static 类名.*; //导入该类下的所有静态方法和常量
例如:import static Math.*; //导入Math下的所有方法和变量(包括常量),则代码中可以直接使用方面和变量名,而不需要前缀Math。