一.StringBuffer类(调用里面的构造方法)
StringBuffer:线程安全的类,支持可变字符序列! * 线程-->依赖于进程,线程执行的最小单元! (这周多线程讲) * 线程安全----->意味着 "同步"---->执行效率低 *举例: 银行类的网站/医院平台 * 线程不安全----> "不同步"---->执行效率高 构造方法: * public StringBuffer() --->空参构造,初始容量16个字符 * public StringBuffer(int capacity)--->指定容量大小的字符串缓冲区(很少用) * public StringBuffer(String str)--->将指定的字符串内容构造到字符串缓冲区中,容量=当前str的长度+16 * * int length()获取字符串缓冲区长度 * int capacity() :获取容量大小 StringBuffer的追加和插入 * public StringBuffer append(任意Java类型):将指定的类型追加字符串缓冲区的序列中,返回自己本身 * public StringBuffer insert(int index,String str/可以任意Java类型) 在指定位置处插入指定的数据,返回字符串缓冲区本身 * StringBuffer的获取功能 * public char charAt(int index):获取字符串缓冲区中指定位置的字符,返回指定的字符 * StringBuffer的删除 * StringBuffer delete(int start, int end) :删除从指定位置开始到指定位置结束(end-1)的字符,返回字符串缓冲区本身 * StringBuffer deleteCharAt(int index):删除指定位置处的字符,返回值字符串缓冲区本身 *StringBuffer的替换功能: * public StringBuffer replace(int start,int end,String str) * 将字符串缓冲区中的从指定位置开始到指定位置结束(end-1)的字符序列使用指定的字符串进行替换*/ 代码测试 class Test1 { public static void main(String[] args) { System.out.println("------------------创建一个字符缓冲区------------------"); StringBuffer s = new StringBuffer(); System.out.println(s); System.out.println("------------------StringBuffer append(任意Java类型数据)添加指定类型字符串到缓冲区序列中,返回自己本身------------------"); s.append("helloworld").append(12).append('男').append(new Object()); System.out.println(s); System.out.println("--------------char charAt(int index)获取指定位置字符---------------"); char ch = s.charAt(3); System.out.println( s.charAt(3)); System.out.println("--------------StringBuffer delete(int start,int end)删除从开始到结束的指定位置的字符()左闭右开--------------"); StringBuffer sb=s.delete(2,5); System.out.println(sb); System.out.println("--------------StringBuffer delete charAt(int index)删除指定位置字符,返回字符串缓冲区本身--------------"); StringBuffer sb1=s.deleteCharAt(4); System.out.println(sb1); System.out.println("---StringBuffer replace(int start,int end,String str)将字符串缓冲区中的从指定位置开始到指定位置结束(end-1)的字符序列使用指定的字符串进行替换----------------"); StringBuffer sb2=s.replace(2,7,"我爱高圆圆"); System.out.println(sb2); }
String和StringBuffer/StringBuilder的区别?
* String:是一个常量,一旦被赋值,其值不能被更改 ,不可变的字符序列!
* 作为形式参数,形式参数的改变不影响实际参数(和基本类型作为形式参数传递的效果一致 ,特殊的引用类型)
* StringBuffer:支持可变的字符串序列,线程安全的类--->同步的--->执行效率低
* StringBuffer的大部分功能--->synchronzied:同步锁(悲观锁)(多线程去讲)
* 作为形式参数,形式参数的改变直接影响实际参数
* StringBuilder:和StringBuffer具备相互兼容的API,线程不安全的类---不同步的---->执行效率高
* 单线程程序(只考虑效率)中,使用StringBuilder去替代StringBuffer
* 多线程环境下(要考虑安全),使用StringBuffer
在实际开发中,牵扯很多类型之间的相互转换
将A类型-->B类型,因为想去使用B类型的功能
但是又可能将B类型--->A类型,最终需求的结果是A类型
*
* String---->StringBuffer
* StringBuffer---->String
class Test1 { public static void main(String[] args) { //String------>StringBuffer //方式1 String s = "helloworld"; StringBuffer s1=new StringBuffer(s); System.out.println(s1); //方式2 创建StringBuffer的空参构造结合append StringBuffer s2=new StringBuffer(); System.out.println(s2.append(s)); System.out.println("-------------------------"); //StringBuffer------->String //方式1 StringBuffer sb=new StringBuffer("HELLOWORLD"); String s3=sb.toString(); System.out.println(s3); System.out.println("--------------------"); //方式2 String的有参构造方法 String s4=new String (sb); System.out.println(sb); } }
* 看程序,写结果
字符串常量相加:先拼接,然后看常量池中有没字符串内容,有就返回地址
字符串变量相加:先开空间
s3 == (s1+s2) ----> 通过反编译工具查看将s1和s2通过字符串缓冲区StringBuilder添加,最终toString()
public class StringTest {
public static void main(String[] args) {
String s1 = "hello" ;
String s2 = "world" ;
String s3 = "helloworld" ; //s3指向常量池里面的"helloworld"
System.out.println(s3 == (s1+s2)); // 认为 true
System.out.println(s3.equals(s1+s2));
System.out.println(s3==("hello"+"world")) ;
System.out.println(s3.equals("hello"+"world"));
}
}
结果:false true true true
二.Integer类
* int--->Integer--->静态的常量
* public static final int MAX_VALUE
* public static final int MIN_VALUE
* 求出100的二进制/八进制/十六进制(使用程序)
* public static String toBinaryString(int i):将十进制--转换二进制的字符串形式
* public static String toHexString(int i)将十进制--转换十六进制的字符串形式
* public static String toOctalString(int i)将十进制--转换八进制的字符串形式
*Integer类:包装的int类型的值
* 四类八种基本类型---------->包装类类型(引用类型) :jdk5以后的自动拆装箱
* byte Byte
* short Short
* int Integer
* long Long
* float Float
* double Double
* char Character
* boolean Boolean
*
* 基本类型 引用类型 String
*
* String Integer int
* Integer的构造方法:
* public Integer(int value) :将int类型数据包装为Integer类型
* public Integer(String s)throws NumberFormatException :将字符串类型包装Integer类型,如果字符串非数字字符串,
* 就会出现NumberFormatExceptio数字格式化异常
*
* jdk5以后的新特性:自动拆装箱 /静态导入(导入到方法的级别,前提方法必须为静态)/增强for循环/可变参数...
* 基本类型会自动装箱为 引用类型: int-->Integer
* 引用类型会拆箱为 基本类型 : Integer-->int
//创建一个Integer类对象
//public Integer(int value) :将int类型数据包装为Integer类型
Integer i = new Integer(100) ; //将int----Integer类型
i += 200 ; //将Integer--->int--->在和200相加---->int--->Integer
System.out.println(i) ;
//public Integer(String s)throws NumberFormatException :
//String s = "hello" ; //字符串必须为数字字符串
String s = "10" ;
Integer ii = new Integer(s) ;
//Integer----->String
s += ii;
System.out.println(ii);
* 类型转换
*
* int---->String 静态方法public static String toString(int i)
* String--->int (使用居多) public static int parseInt(String s)
* 前后端交互:前端提交的数据几乎String类型
//int--->String
int i = 100 ;
String result = "" ;
//方式1:字符串拼接符号+
result += i;
System.out.println(result) ;
System.out.println("---------------------------------");
//方式2:int--->Integer---->String
//Integer(int i) ---->publict String toString()
Integer ig = new Integer(i) ;//int类型转Integer
String result2 = ig.toString();//String 类的无参构造
System.out.println(result2); //"100"
System.out.println("---------------------------------");
//方式3:Integer的静态方法public static String toString(int i)
String result3 = Integer.toString(i);
System.out.println(result3);
String转int
// String---->int
String s = "20" ; //数字字符串
//方式1:String--->Integer --->public int intValue()
Integer ig2 = new Integer(s) ;
int value = ig2.intValue();
System.out.println(value); //20
System.out.println("-----------------------------------------") ;
//方式2:直接转换public static int parseInt(String s) throws NumberFormatException
int value2 = Integer.parseInt(s);
System.out.println(value2); //20
String---->int适用的场景
表单提交数据时
三.character
* 构造方法
* Character(char value):包装一个char字符类型 char---->Character
* 成员方法
* public static boolean isDigit(char ch):判断是否为数字字符
* public static boolean isUpperCase(char ch):判断是否为大写字母字符
* public static boolean isLowerCase(char ch):判断是否为小写字母字符
public class CharacterDemo {
public static void main(String[] args) {
//创建一个Character对象
Character character = new Character((char) 97) ;
System.out.println(character);
Character character2 = new Character('a') ;
System.out.println(character2);
/* public static boolean isDigit(char ch):判断是否为数字字符
public static boolean isUpperCase(char ch):判断是否为大写字母字符
public static boolean isLowerCase(char ch):判断是否为小写字母字符*/
System.out.println(Character.isDigit('0'));
System.out.println(Character.isDigit('A'));
System.out.println(Character.isDigit('a'));
System.out.println(Character.isUpperCase('0'));
System.out.println(Character.isUpperCase('A'));
System.out.println(Character.isUpperCase('a'));
}
}
四.Date
java.util.Date:特定的日期
构造方法:
public Date():系统时间的日期格式
成员方法:
public long getTime():获取指定Date对象的系统时间毫秒值
Date日期格式 ----->String日期文本 --->格式化操作
*
* String日期文本
* 2022/11/15 2022年11月15日 ----------->Date (重点 ) ---->解析
* 应用场景:用户注册 填写 出生日期 "1995-05-27" String---->数据库Date格式
*
* 格式化或者解析:使用DateFormat类,它是一个抽象类,不能实例化,用的抽象类的子类SimpleDateFormat
*
* Date日期个--->String格式化
* public final String format(Date date)
* 构造方法
* SimpleDateFormat(String pattern) pattern模式 : y:代表年 yyyy 代表整个年份 :2022
* M:代表月份 MM 11 07 06
* d:月份中的日 dd 03 11 01
* H:0-23(一天的小数数) HH
* m:小时的分钟数 mm
*
*
* String日期文本---->Date 解析
* public Date parse(String source) throws ParseException :
* 如果String日期文本 和转换器SimpleDateFormat(String pattern) 里面的模式不匹配就会造成解析异常!
* String s = "2008-5-12"
* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ") ;//解析出问题了!
*