String
1 被final修饰的类,不能被继承
2 字符串存在于常量池中。 如果newString()会在堆内存在开辟空间,如果是直接赋值的话,会在常量池中也开辟空间
String | 可以通过+做字符串的拼接,但是效率低下 | boolean |
---|---|---|
isEmpty() | 判断是否为空 | int |
length0) | 取到该String的长度 | boolean |
equals(Object obj) | 判断两个字符串是否相等 | Object |
equalslgnoreCase(String as) | 不区分大小写比较 | char |
charAt(int index) | 返回该下标的 | char |
substring(int start) | 截取字符串下标从start开始 | String |
substring(int start,int end ) | 截取区间字符串从start开始到end结束 (包头不包尾) | String |
replace(char oldchar new) | 替换字符串 | String |
trim() | 去掉字母首尾空格 | String |
indexOf() | 寻找某个字符串在目标字符串的位置 | int |
String、StringBuffer、StringBuilder的区别
1、String类的内容是不可改变的。能改变的只是其内存指向。
2、String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
3、StringBuffer类的对象内容是可以修改的。
4、String可以直接通过赋值的方式实现对象实例化,而StringBuffer只能通过构造方法的方式对象实例化。
5、StringBuffer在处理字符串的时候,不会生成新的对象。从内存这个角度来说,StringBuffer要比String更好。
6、StringBuffer是线程安全的,速度慢。
StringBuilder是线程不安全的,不能同步访问,执行速度快。
方法名 | 作用 | 返回值 |
---|---|---|
append(String str) | 追加字符串 | tringBuffer |
insert(int offset,String str) | 指定位置追加字符串 | StringBuffer |
deleteCharAt(int index) | 删除下标处的字符 | StringBuffer |
delete(int startint end) | 删除下标区间的字符 | StringBuffer |
replace(int startint end.String str) | 替换区间字符 | StringBuffer |
reverse() | 反转字符串 | StringBuffer |
substring(int start,int end) | 截取区间字符串从start开始到end结束 (包头不包尾) | String |
substring(int start) | 截取字符串 | String |
split0 | 拆分字符串 | String[] |
byte[] bytes ={97,98,99,100};
String s= new String(bytes);
System.out.println(s);
char []chars={'老','韩','c','d'};
String s1 =new String(chars);
System.out.println(s1);
String name ="大爷";
System.out.println(name.isEmpty());
System.out.println(name.length());
String S2 ="0123456789";
String s3 ="Abc";
System.out.println(S2.equalsIgnoreCase(s3));
char c = S2.charAt(1);
System.out.println(c);
String substring = S2.substring(3,7); // [3,7)
System.out.println(substring);
String replace = S2.replace("1", "9"); // 替换所有的
System.out.println(replace);
String s4 = " bcbab ";
System.out.println(s4.trim());
int i = s4.indexOf("ab"); // 从前往后找,如果没有返回-1
System.out.println(i);
byte[] bytes1 = "老韩".getBytes();
System.out.println(Arrays.toString(bytes1));
//跟汉字编码有关系
byte[] bytes2 = {-24, -128, -127};
System.out.println(new String(bytes2));
}
Object
Object类中的方法:
1 getClass: 返回对象的字节码文件对象
2 hashCode:返回对象的哈希码值(对象的内存地址值)
3 equals 比较两个对象是否相等
4 toString: getClass().getName()+“@”+Integer.toHexSTring(hashCode());类的全路径名 + @ + 对象的哈希码值的十六进制
如果我们想按照自己的想法输出对象的信息,我们就需要重写toSteing方法
5 equals和= =的区别:
equals:底层的代码是= =,
equals:只能比较引用数据类型
==:可以比较基本数据类型和引用数据类型,比较基本数据类型的时候比较的是值,比较引用数据类型的时候比较的是地址值
Date date=new Date();
System.out.println(date);
long time=date.getTime();
long l=System.currentTimeMillis();
System.out.println(time);
System.out.println(l);
Date date1=new Date(1690267117172l);
System.out.println(date1);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
String format =sdf.format(date);
System.out.println(format);
try {
Date date2 =sdf.parse("2025年07月25日 11:22:04");
System.out.println(date2);
}catch (ParseException e){
throw new RuntimeException(e);
}
包装
基本数据类型:是没有方法的,但是可以通过包装类来实现方法的调用
写法上只有
int Integer
char Character
装箱:穿装备(变强) 基本数据类型—>包装类
拆箱:脱装备(变弱) 包装类—>基本数据类型
剩下的都是首字母大写
date
date表示日期
1秒=1000 毫秒
SimpleDateFormat:
format Date->String
parse String->Date
Calender
Calender 日历类
1,日历类擅长的是堆日期进行加减操作
Calendar instance=Calendar.getInstance();
System.out.println(instance);
instance.add(Calendar.MONTH,2);
instance.add(Calendar.DAY_OF_MONTH,-2);
//calendar转换成date
Date time = instance.getTime();
System.out.println(time);
//date转换成xalendar
instance.setTime(new Date());