需要通过构造来实例化(new),实际存储的是对象的引用(指针)
字符串String
一、 定义
- 定义格式:new(一般省略不写) String 变量名=“内容”
String str1 = "Hello";
//
String str2;
str2 = "Hello";
//
String str3 = new String("Hello");
String str4 = new String(str3);
//
char[] charArray = {'H','e','l','l','o'};
String str5 = new String(charArray);
- 字符串的内容是不能改变的,它的值在创建后不能被更改。字符串存储与串池内。
- 当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在,若不存在则创建新的字符串;若存在则复用。所以直接赋值可以节省内存(串池包含于堆内存,但串池和堆内存的地址要分开看)
- new出来的不会复用,而是开辟新的空间。
二、 方法
String str = "12345";
str.charAt(pos);//返回str的第pos个元素
str.substring("123");
str.replace("123","abc");//将123替换为abc
str.toCharArray();//转换为char数组
str.startwith('a');//判断是否以a开头
str.toLowerCase();//把字符串中的大写字母转换为小写
StringBulider
- 链式编程:在调用一个方法时,不需要用变量接收方法的结果,可以继续调用其他方法。
一、 构造
StringBuilder 变量名=new 构造函数;
构造函数
StringBuilder() value内容为空,并设置容量为16个字节;
StringBuilder(CharSequece seq) 使用seq初始化,容量在此基础上加16;
StringBuilder(int capacity) 设置特定容量;
StringBuilder(String str) 使用str初始化,容量str大小的基础上加16;
二、 方法
StringBulider sb = new StringBuilder();
sb.append("aaa").append("bbb").append("ccc");//在结尾添加字符串,链式编程
sb.length();//长度
sb.reverse();//反转
sb.toString();//转为字符串
sb.charAt(pos);//返回位置pos的元素
sb.delete(start,end);//删除从start到end的元素,包头不包尾
sb.deleteCharAt(pos);//删除第pos个元素
-
底层原理
- 字符串拼接时,如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串;若有变量参与,则会创建新的字符串,浪费内存
- StringBuilder可提高效率,因为String拼接是将所有要拼接的内容都往StringBuilder中放,而直接用StringBuilder不会创建很多无用的空间,节省内存
- ==号,比较基本数据类型时,比较的是数据值;比较引用数据类型时,比较的是地址值。
- StringBuilder的长度:默认长度为16字节,若添加的内容长度小于16,直接存;添加的内容长度大于16会扩容(原来的容量*2+2);若扩容之后还不够,以实际长度为准。
StringBuffer
方法和StringBuilder一样,但更安全(多线程)
StringJoiner
如下所示,new StringJoiner()中的三个参数分别表示间隔、开始、结束符号,add进去的元素最终会以开始符号开头,元素之间为间隔符号,以结束符号结尾。
StringJoiner sj = new StringJoiner(",","{","}");
sj.add(str1);
sj.add(str2);
sj.add(str3);
System.out.println(sj);
//输出{str1,str2,str3}
Integer
Integer类是基本类型int所对应的包装类,该类提供了多个方法,能在int类型和String类型之间相互转换,还提供了处理int类型时非常有用的其他一些常量和方法
一、 构造
Integer i1 = 123;
Integer i2 = new Integer("123");
二、 方法
- String到int的转换
String str = "-100"; int num = Integer.parseInt(str); //或 Integer i = new Integer(str); int num1 = i.intValue();
- 转换为不同进制
int num = 6;
System.out.println("num的二进制:" + Integer.toBinaryString(num));
System.out.println("num的二进制:" + Integer.toString(num, 2));
System.out.println("num的八进制:" + Integer.toOctalString(num));
System.out.println("num的八进制:" + Integer.toString(num, 8));
System.out.println("num的十六进制:" + Integer.toHexString(num));
System.out.println("num的十六进制:" + Integer.toString(num, 16));
- int转String
Integer.toString(int i);//效率更高
String.valueOf(int i);