一、String
String类是不可变类,就是说String对象声明后,将不可修改
只要采用双引号赋值字符串,那么在编译期将会放在方法区中的字符串的常量池,如果是运行时对字符串相加或者相减会放在堆中。
String s1="abc"和String s2=new String("abc")
如果是采用双引号引起来的字符串常量,首先会到常量池中去查找,如果存在就不再分配,
如果不存在就分配,常量池中的数据是在编译期赋值的.
关于
s3
,
s3
采用的是
new
的方式,在
new
的时候存在双引号,所以他会到常量区中查找
“
abc
”,而常量区中存在“
abc
”,所以常量区中将不再放置字符串,而
new
关键子会在
堆中分配内存,所以在堆中会创建一个对象
abc
,
s3
会指向
abc
面试题
String s1 = new String("hello") ;
String s2 = new String("hello") ;以上创建了几个对象?
大家会看到创建了 3 个对象,堆区中 2 个,常量池中 1 一个
String常用方法简介
String 已经重写了toString 方法输出的不是对象的内存地址,而是字符串本身
1. endsWith
:判断字符串是否以指定的后缀结束
2. startsWith
,判断字符串是否以指定的前缀开始
3. equals
,字符串相等比较,不忽略大小写
4. equalsIgnoreCase
,字符串相等比较,忽略大小写
5.
indexOf
,取得指定字符在字符串的位置
6. lastIndexOf
,返回最后一次字符串出现的位置
7. length
,取得字符串的长度
8.
replaceAll
,替换字符串中指定的内容
9. split
,根据指定的表达式拆分字符串
10.
substring
,截子串
11
. trim
,
去前尾空格
12. valueOf
,将其他类型转换成字符串
13..charAt指定索引处的char值
14.getBytes将字符串对象转换成字节数组
15.replace(old,new)
16.toCharArray字符串转换为char数组
17.tolowerCase转换成小写/toUpperCase转换成大写
使用String的注意事项
因为
String
是不可变对象,如果多个字符串进行拼接,将会形成多个对象,这样可能会造成内
存溢出,会给垃圾回收带来工作量,如下面的应用最好不要用
String
正则表达式:
可以描述特定的字符模式
如:
”a{2}” 表示由两个字符“a”构成的字符串,等同于普通字符串“
aa
”,
如
”\d”
代表任意一个数字
0~9
,
\D
代表所有的非数字,
\w
代表所有的英文字母,
\W
代表所有的非英文字母。
二、StringBuffer和StringBuilder
StringBuffer 称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果
字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。StringBuffer 是可变对象,
这个是 String 最大的不同
用法同 StringBuffer,StringBuilder 和 StringBuffer 的区别是 StringBuffer 中所有的方法都是同
步的,是线程安全的,但速度慢,StringBuilder 的速度快,但不是线程安全的
二、日期类
常用日期类:
java.util.Date
java.text.SimpleDateFormat
java.util.Calendar
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateTest01 {
public static void main(String[] args) throws Exception{
//获取系统当前时间(精确到毫秒的系统当前时间)
Date today = new Date();
//import java.util.Date类的toString方法已经被重写了
//输出的应该不是一个对象的内存地址,应该是一个日期的字符串
System.out.println(today);
//格式化日期SimpleDateFormat专门用来日期格式化的
//yyyy年
//MM月
//dd日
//HH时
//mm分
//ss秒
//SSS毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//format参数加日期就会返回一个字符串
System.out.println(sdf.format(today));
//取得 2000-10-01 为星期几
//parse将String转换成date
Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2000-10-01");
c.setTime(d);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
}
}
三、数字类
常用数字类:
java.text.DecimalFormat
和
java.math.BigDecimal
DecimalFormat:我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供DecimalFormat类,帮你用最快的速度将数字格式化为你需要的样子
import java.text.DecimalFormat;
public class DecimalTest01 {
public static void main(String[] args) throws Exception{
//加入千分位,保留两位小数
DecimalFormat df = new DecimalFormat("###,###.##");
System.out.println(df.format(1234.23452));
//加入千分位保留 4 位小数,不够补零
System.out.println(new DecimalFormat("###,###.0000").format(12345.12));
}
}
BigDecimal 可以精确计算,特别是财务数据
import java.math.BigDecimal;
public class BigDecimalTest01 {
public static void main(String[] args) throws Exception{
BigDecimal v1 = new BigDecimal(10);
BigDecimal v2 = new BigDecimal(20);
//相加运算
BigDecimal v3 = v1.add(v2);
System.out.println(v3);
}
}