本章节讲解常用类:String类和Date类
一、String类
1、什么是String类?
String类是用来创建字符串类型的,是引用数据类型。
2、特点:
①字符串不能改变
②因为不能改变,所以是可以共享的
③字符串的效果相当于要给char[]数组,但是实际上是byte[]字节数组
3、创建方式
第一种: String str="123"; //直接使用双引号的就是字符串对象
第二种:通过构造方法:String str=new String("abc");
4、常用方法(更多方法参考jdk8)
charAt(index):返回指定下表处的字符
indexOf(char):返回该字符第一次出现的下标
concat(str,str1....):拼接字符串,得到一个新的字符串
contains(char):判断是否包含指定字符
endWith(char):判断是否以指定字符结尾
startsWith(char):判断是否以指定字符开头
subString(index):截取从index开始到字符串结尾的字符串
sunString(startIndex,endIndex):截取开始到结束下边之间的字符串,前闭后开
split(""):以指定字符为间隔分割字符串为字符数组
trim():删除字符串开头结尾处的空格,返回一个新的字符串
toString():返回此对象本身
replace(old,new):使用新的字符替代字符串中的旧的字符
length():返回字符串的长度
join(连接符,obj....):使用指定连接符连接多个字符串
5、字符串的比较
字符串的比较不使用 == ,使用equals(Object)或者equalsIgnoreCase(Object),equalsIgnoreCase()不区分 大小写。
为什么不能使用 "=="?
①”==“在基本数据类型比较时,比较的是值。在比较引用数据类型时,比较的是内存地址
②equals()在底层依旧使用的”==“,不过在String类中对其进行了重写,让它能够比较字符串的值
“==”和equals()从内存分析:
在内存中的栈、堆、常来区中,栈用来存放变量名(引用),堆中用来存放创建的对象,常量中存放常量值。而字符串不改变,就发生在常量 区。当String str1="123"加载时,str1 这个变量名就加载进栈,接着str1 到常量池去寻找 “123” 这个常量值,如果常量池没有该常量,那么就创建一 个,str1中存放 “123” 的地址。当String str2="123"加载时,str2加载进栈,然后也去常量池中寻找 “123” ,这是常量池中已经存在了该常量,就不再 创建,使用已经存在的这个常量得地址。这个就体现了String字符串不变,可共享的特点。到 String str3=new String("123")时,str3这个变量名进栈, new String()在堆里创建,str3存放的是堆里对象得地址,对象的初始化值会到常量池中寻找,如果常量池中存在,就引用已经存在的,不存的话,在 常量池中先创建。
6、String的不足:
上边我们提到了字符串是不可变的,如果我们要在原来字符串的基础上去添加字符串,就会开辟一个空间,将拼接好的字符串放进去,拼接前的 字符串还在内存中,新加的数量少还好,如果由大量的数据拼接,就会浪费大量的时间和内存。
所以,java给了两个新的类:StringBuffer和StringBuilder。这两个类创建的字符串都是可变的,拼接之类的就是再原来基础上拼接,不会再生成一 个新的字符串。这样就节省了大量的空间和开辟空间的时间。StringBuffer是线程安全的,StringBuilder是线程不安全的。这两个的类方法和String类一 样。StringBuffer和StringBuilder拼接和插入使用append()和insert()。String拼接字符串可以使用 + ,String无法插入。
二、Date类
*Date类做什么用?
用来获取当前本地的时间。
*常见Date类对象?
Date d=new Date();
*通过Date类获取的时间,其格式不适合我们进行阅读,所以要进行格式化。
格式化时用的类:SimpleDateFormat 该类中两个方法:format()将时间格式转为特定格式的字符串。parse()将字符串转为日期格式
//将本地时间进行格式化,返回值为字符串 Date date=new Date(); //构造方法里边设置想要格式成的样式 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format=sdf.format(date); //将字符串转换为日期格式 ,要转的字符串格式要和构造方法中的规则样式一样,这样才能够解析 Date newDate=sdf.parse(format);
*SimpleDateFormat类时jdk1.7之前提供的,jdk1.8之后提供的如下:
获取本地时间:
①LocalDateTime类,获取本地的日期时间
②LocalDate类,获取本地的日期
③LocalTime类,获取本地的时间
都是通过now()方法获取本地时间,应为now()是静态的,所以可以 类名.now()
格式化使用的类:
DateTimeFormatter
格式化的过程和jdk1.7不同,看例子:
public static void main(String[] args) throws ParseException { // 获得当前的日期 LocalDate now = LocalDate.now(); // 使用DateTimeFormatter类的ofPattern()设置格式 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 对日期进行格式化format()方法 String format = now.format(dateTimeFormatter); System.out.println(format); //将字符串转换为日期格式 String str="2020.03.12"; // 使用DateTimeFormatter类的ofPattern()设置格式。只有方法中的格式和字符串的格式对应,parse()方法才能识别到那位是日期 DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy.MM.dd"); // 此处的parse()方法由LocalDate类调用,而jdk1.7之前是由SimpleDateFormat类的对象调用 LocalDate parse = LocalDate.parse(str, dateTimeFormatter1); System.out.println(parse); }
原文:https://www.cnblogs.com/fbbg/p/14119403.html