String 是一个引用类型,默认值为 null
String 类是用关键字 final 修饰的,所以 String 类不能被继承
import java.util.Arrays;
public class StringDemo {
public static void main(String[] args) {
//定义字符(char)数组
char[] s1 = {'北','京'};
char[] s2 = {'达','内','科','技'};
System.out.println(s2);
char[] s3 = Arrays.copyOf(s1, s1.length+s2.length);
//将s2中的内容复制到s3数组中去
System.arraycopy(s2, 0, s3, s1.length, s2.length);
System.out.println(s3);
//定义字符串(String)数组
String s4 = "北京";
String s5 = "达内科技";
//s4.concat(s5),concat()方法的作用是合并数组
String s6 = s4.concat(s5);
System.out.println(s6);
/* 运算结构:
达内科技
北京达内科技
北京达内科技
*/
}
}
通过上述代码的描述。主要理解 char[] 就等同于字符串String,其实String类内部就是 char[] ,s1.concat() 方法的底层实现原理就是用数组复制完成的。
(1) charAt() : 获取字符串中的某个字符
(2) length() : 获取字符串长度
(3) trim() : 去掉字符串两端的空白
(4) indexOf() : 查找某个子串在字符串中第一次出现的位置
(5) substring(int beginIndex,int endIndex) : 截取字符串中的某一段子串, 从 start开始, end结束
(6) substring(int start) : 截取从start位置开始以后的字符串
(7) toLowerCase() : 将字符串转换为小写
(8) toUpperCase() : 将字符串转换为大写
(9) toCharArray() : 将字符串转换为字符数组
(10) endsWith() : 判定是否以指定的字符串结束
(11) startsWith() : 判定是否以指定的字符串开始
(12) lastIndexOf() : 查找某个子串最后一次出现的索引
(13) equals() : 判定输入的字符串是否与参数相等
(14) equalsIgnoreCase() : 判定输入的字符串是否与参数相等,不分大小写
String是不可能改变的,如果要改变一个String类型的变量的值,会创建出新的对象。然后让String类型指向新的String对象,此时堆内存中就会生成很多新的没有被引用的对象,JVM的GC就开始工作回收这些对象,这样使用效率就比较低。
StirngBuffer和StringBuilder是类似于String的缓冲区,通过它可以对字符串进行修改而不会创建许多对象
StringBuffer是线程安全,效率比较低;StringBuilder是线程不安全,效率比较高。
StringBuffer 和 StringBuilder 中提供如下常用方法:
(1) append(String) : 在字符串的末尾追加字符串
(2) insert(int , String ) : 在字符串的某个位置插入子串
(3) delete(int , int) : 删除字符串中的某段子串
(4) toString() : 转换为字符串文本
方法使用如下:
public class StringBufferDemo {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("达内集团").append("科技").append("上市了").insert(0, "北京").delete(4, 6);//delete()不包括6 4<=x<6
//转换为字符串类型
String str = builder.toString();
System.out.println(str);
}
}
//输出结果为:北京达内科技上市了
Object 类可以视为所有类的父类,如果某个类没有明确的父类,会默认继承 Object 类。可以使用Object类型的变量指向任意类型的对象,在Object类中有一个无参数的构造方法,在构造一个子类实例时都会默认先调用该构造方法
只要定义一个类,就默认继承Object类,也就是说,继承了Object类中的属性和方法
在实际开发中经常需要对Java中的基本类型进行处理,比如需要把int类型的数据结构转换为字符串,把“123”的字符串转换为整型的123,但是int是基本数据类型不能处理。在 Java 中,已经将Java的基本数据类型与其提供的一些常用的数据操作方法进行封装,封装成了包装类,这样才有一切皆对象的感觉。
包装类是不可改变的,在构造了包装类对象后,不允许改变包装在其中的值
基本类型对应的包装类,如下表:
基本类型 | 包装类 | 父类 |
---|---|---|
int | Java.long.Integer | Java.long.Number |
long | Java.long.Long | Java.long.Number |
double | Java.long.Double | Java.long.Number |
short | Java.long.Short | Java.long.Number |
float | Java.long.Float | Java.long.Number |
byte | Java.long.Byte | Java.long.Number |
char | Java.long.Char | Java.long.Object |
boolean | Java.long.Boolean | Java.long.Object |
从上表可以看出,Java基本类型中除了char和boolean的包装类是直接继承Object以外,其他都是继承Number类
Number类是抽象类,其子类必须提供将其表示的数值转换为byte、double、float、int、long和short的方法:
(1) doubleValue() : 以double形式返回指定的数值
(2) intValue() : 以int形式返回指定的数值
(3) floatValue() : 以float形式返回指定的数值
例如如下代码演示:
public class Date {
public static void main(String[] args) {
Number d = 1.0;
Number n = 123;
//输出number类型的d和n对象所属的类型
//xx.getClass().getName()
System.out.println(d.getClass().getName());
System.out.println(n.getClass().getName());
//将d转换为int类型
int intvalue = d.intValue();
//将n转换为double类型
double doublevalue = n.doubleValue();
System.out.println(intvalue);
System.out.println(doublevalue);
}
}
/*运算结果: java.lang.Double
java.lang.Integer
1
123.0
*/
以上是通过Number对double和int进行转换
Integer类提供了多个方法,能在int类型和String类型之间进行互相转换,还能提供一些常量,比如:
(1) static int MAX_VALUE 值是 int 类型表示的最大值
(2) static int MIN_VALUE 值是 int 类型表示的最小值
(3) parseInt(String name) 将字符串类型转换为int类型
例如如下程序:
public class IntegerDemo {
public static void main(String[] args) {
/*
目前已经为自动装箱拆箱。不需要再手动装箱拆箱
Integer in = new Integer(10); 装箱
int ints = in.intValue(); 拆箱
System.out.println(ints*ints); 100
*/
String str = "123";
//将字符串str转换为int类型
int intValue = Integer.parseInt(str);
System.out.println(intValue);
String str1 = "一百二十三";
int intValue1 = Integer.parseInt(str1);
//抛出异常:NumberFormatException
//Integer 所要转换的字符串必须是数值字符串,否则会报错
System.out.println(intValue1);
}
}
/*运算结果:123 */
以上是通过Integer将字符串转换为int类型
Double 类的对象是 double 的包装类,其中提供的构造方法有:
(1) Double(double value) : 包装一个 double 类型的 Double 实例
(2) Double(String s) : 包装一个类型为String的Double实例,这里需要注意 s 必须是整型的字符串
Double 类中提供的方法:
(1) double doubleValue() :
(2) static double parseDouble(String s) : 返回一个新的double值,该值被初始化为用指定的String表示的值
例如如下程序:
public class DoubleDemo {
public static void main(String[] args) {
//将1包装成Double对象
Double dou = new Double(1); //装箱
System.out.println(dou);
//将str转换成double类型
String str = "123";
double doubleValue = Double.parseDouble(str);
System.out.println(doubleValue);
//抛出异常:NumberFormatException
//parseDouble 所要转换的字符串必须是数值字符串,否则会报错
String str1 = "一百";
double doubleValue1 = Double.parseDouble(str1);
System.out.println(doubleValue1);
}
}
以上是将字符串转换为 Double 类型