1.String类
String类是不可变的,String对象申明后不可修改。
String s1 = "a";
String s2 ="b";
s1= s1+s2;
"a","b" ,都是存在字符串常量区。在运行过程中对字符串相加减会放在堆中。再看字符串常量池中是否存在改字符串,
若存在,返回该字符串的内存地址,若不存在先将字符串放在字符串常量池中,再返回内存地址。
String s1= new String("abc");和String s2 ="abc";
s1在堆中创建了一个对象,该对象存放的是"abc"在字符串常量区的内存地址。一共new了两个对象
s2直接指向字符串"abc"在常量区的内存地址。 new了一个对象。
String常用方法:
endsWith: 判断字符串是否以指定的后缀结束。
startsWith:判断字符串是否以指定前缀开始。
equals: 字符串相等比较。
equalsIgnoreCase,字符串相等比较,忽略大小写。
indexOf,取得指定字符串在字符串中第一次出现的位置。
lastIndexOf:取得指定字符串在字符串中的最后一次出现的位置。
length:获取字符串的长度。
replaceAll:替换字符串中指定的内容。
split:根据指定的表达式拆分你字符串。
subString:截取字符串。
trim:去除前后空格。
valueOf:将其他类型转换成字符串。
public class StringTest {
public static void main(String[] args) {
String s1 ="abcdb";
//判断字符串是否以指定字符串结束。
System.out.println(s1.endsWith("b"));//true
//判断字符串是否以指定字符串开始。
System.out.println(s1.startsWith("a"));//true
//比较字符串是否相等
System.out.println(s1.equals("av"));//false
//比较字符串是否相等,忽略大小写
System.out.println(s1.equalsIgnoreCase("abcdB"));//true
//取得指定字符串在字符串中第一次出现的位置。
System.out.println(s1.indexOf("a"));//0
//取得指定字符串在字符串中的最后一次出现的位置。
System.out.println(s1.lastIndexOf("b"));//4
//获取字符串的长度
System.out.println(s1.length());//5
//replaceAll:替换字符串中指定的内容。
System.out.println(s1.replaceAll("b","z"));//azcdz
//split:根据指定的表达式拆分你字符串。
String s2 ="my name is zhangsan";
String[] s = s2.split(" ");//根据空格把字符串拆分成单词存放在一个字符串数组中
//subString:截取字符串。
System.out.println(s1.substring(1,2));//b。截取区间前闭后开
//trim:去除前后空格
String s3=" zhangsan " ;
System.out.println(s3.trim());//zhangsan
//valueOf,将其他类型转换成字符串
String s4 =String.valueOf(123465);//将int类型123465转换成字符串"123456"。
}
}
2.StringBuiler和StringBuffer
StringBuffer称为字符串缓冲区,它的工作原理是先开辟一块内存空间,存放字符序列,如果字符序列满了
,会从新改变字符串缓冲区大小,以容纳更长的字符串。它和String最大的区别是它是可变对象。
append()字符串追加方法。
StringBuiler和StringBuffer用法相同,StringBuiler中的方法都是同步方法。是线程安全的。效率较低。
public class StringBufferTest {
public static void main(String[] args) {
//创建一个字符串缓冲区
StringBuffer sb = new StringBuffer();
for(int i = 0; i <100;i++){
//追加字符串
sb.append(i);
sb.append(",");
}
//去除最后的,。
System.out.println(sb.substring(0,sb.length()-1));
}
}
3.基本数据类型对应的包装类
基本类型的包装类主要提供了更多的实用操作,这样更容易处理基本类型。所有的包装类都是
final 的,所以不能创建其子类,包装类都是不可变对象。
8种基本数据类型对应的包装类型
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
4.日期类
常用日期类
java.util.Date,
java.util.SimpleDateFromat
public class DateTest {
public static void main(String[] args) {
//获取系统当前日期
Date now = new Date();
//格式化日期格式
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String nowStr = sdf1.format(now);
System.out.println(nowStr);
//将字符串转换成日期格式
String date ="1937-10-1 08:00:00 000";
try {
Date date1 = sdf1.parse(date);
System.out.println(date1);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
5.数字类:
java.text.DecimalFormat
java.math.BigDecimal
public class DecimalFormatTest {
public static void main(String[] args) {
//格式化数字格式,加入千分位,保留4位小数
DecimalFormat df1 = new DecimalFormat("###,###.####");
String numStr = df1.format(155646561654.156);
System.out.println(numStr);
//格式化数字格式,加入千分位,保留4位小数,不够补零。
System.out.println(new DecimalFormat("###,###.0000").format(152.16));
}
}
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal v1 =new BigDecimal(123);
BigDecimal v2 =new BigDecimal(1225);
BigDecimal add = v1.add(v2);
//相加运算
System.out.println(add);
}
}
6.Random
java.util.Rondom可以产生随机数。
public class RandomTest {
public static void main(String[] args) {
//创建一个新的随机数生成器。
Random random = new Random();
//返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 int值。
System.out.println(random.nextInt(100));
}
}
7.枚举
使用enum可以圈定一个范围
如果只有几种可能存在的值,那么可以就被定义为枚举,是因为可以将可能存在的值一枚一枚的列举出来。
public class EnumTest {
public static void main(String[] args) throws Exception{
Result r = method1(10, 2);
if (r == Result.SUCCESS) {
System.out.println("成功!");
}
if (r == Result.FAILURE) {
System.out.println("失败!");
}
}
//正确返回 SUCCESS,失败返回:FAILURE
private static Result method1(int value1, int value2) {
try {
int v = value1/value2;
return Result.SUCCESS;
}catch(Exception e) {
return Result.FAILURE;
}
}
}
enum Result {
SUCCESS,
FAILURE
}