字符串与包装类

字符串与包装类

目录

  • 字符串

  • String类的常用方法

    • 获取信息方法

    • 操作方法

    • 判断方法

  • StringBuffer

  • 基本数据类型的包装类

字符串

String类位于java.lang包下 这个包下的类使用的时候都不需要导包

创建字符串对象有两种形式

一种是引用字符串常量给字符串变量赋值

String s1 = "hello";

一种是通过构造方法赋值

String s2 = new String();

对于字符串常量 如果内容相同 java认为他们代表同一个String对象

用关键字new调用构造方法 总是会创建一个新的对象 无论内容是否相同

String类型数据可以用"+“或”+="符号表示连接

String s = "we";
s = s + "are";
s += "students";

面试题

为什么普通对象打印的是地址 而字符串打印的是内容?

普通对象调用的是Object的toString方法 会将完整的包名+类名+@+十六进制的地址值打印在控制台上 而String类重写了Object的toString方法 会将字符串转换为字符数组 再将字符数组输出到控制台上 所以打印的是内容

public static void main(String[] args){
    String s1 = new String("hello");
    Student s2 = new Student();
    System.out.println(s1);
    System.out.println(s2);
}

面试题

        String s1 = "hello";//1
        String s2 = new String();//1
        String s3 = new String("hello");//1
        String s4 = new String("hel1o");//2
        String s5 = new String("hello world");//2
        String s6 = "hello world";//0

问:上述代码一共创建了几个对象?

共创建七个对象 String的字符串常量位于字符串常量池中 而字符串常量池在1.6时位于方法区 1.8之后位于堆区 而常量池在设计的时候为了减少内容 如果字符串常量已经存在 则再次使用的时候会直接引用 而如果需要的字符串常量不存在 就需要在常量池中创建出来 不管常量池中如何 只要有new就会在堆区中创建一个字符串对象 所以同时考虑堆区和常量池的问题 上述代码应该共创建了七个对象

String类的常用方法

获取信息方法

  • 获取字符串长度

length()方法

用于返回字符串的长度 包括空格 返回类型为int

String s = " hello everyone ";
System.out.println(s.length());
  • 查找字符串方法

indexOf()方法–正向查找

返回参数字符串在此字符串中第一次出现处的索引 从指定的索引开始 如果没有检索到 方法返回值为-1

返回类型int

String s = " hello";
System.out.println(s.indexOf("l"));

lastIndexOf()方法–反向查找

返回参数字符串在此字符串中最后一次出现的索引 从指定的索引开始反向搜索 如果没有检索到 方法返回值为-1

返回类型int

String s = " hello";
System.out.println(s.lastIndexOf("l"));
  • 查找字符方法

charAt()方法

返回参数索引位置的字符

返回类型char

String s = " hello";
System.out.println(s.charAt(4));

操作方法

  • 获取子字符串方法

substring()方法

返回一个新的字符串 他是此字符串的一个子字符串 该子字符串从指定索引处的字符开始

参数为 起始索引,结束索引

返回类型String

String s = " hello world ";
String s1 = s.substring(2,8);
  • 获取新字符串方法

trim()方法

返回去除字符串开头和结尾空格的字符串

返回类型 String

String s = " hello world ";
System.out.println(s.trim());

replace()方法

返回一个新的字符串 通过用newChar替换此字符串中出现的所有oldChar得到的

参数说明:原字符,新字符

返回类型 String

String s = " hello world ";
System.out.println(s.replace(" ","A"));//将空格替换成A

toUpperCase()方法

使用默认语言环境的规则将此String中的所有字符都转换为大写

返回类型 String

String s = "ABCdef";
System.out.println(s.toUpperCase());

toLowerCase()方法

使用默认语言环境的规则将此String中的所有字符都转换为小写

返回类型 String

String s = "ABCdef";
System.out.println(s.toLowerCase());

判断方法

  • 字符串判断方法

startsWith()方法

判断此字符串是否以指定的前缀开始 如果是返回true 否则返回false

参数说明:前缀,在此字符串中开始查找的位置

endsWith()方法

判断此字符串是否以指定的后缀结束 如果是返回true 否则返回false

参数说明:后缀

equals()方法

将此字符串与指定的对象比较 当且仅当该参数不为null 并且是与此对象表示相同字符序列的String对象时 结果才为true

参数说明:与此String进行比较的对象

equalsIgnoreCase()方法

将此String与另一个String比较 不考虑大小写 如果相同返回true 否则返回false

参数说明:与此String比较的另一个String

面试题

equals的实现原理

equals在比较字符串的时候比的是内容 需要将字符串转换为字符数组 然后在通过循环进行逐一比较 但是为了提高效率 设置了三重判断 第一重比较两个对象的地址是否相同 如果地址相同则表示的是同一个对象 返回为true 如果两个对象的地址不相同 则进行第二重判断 比较对象是不是String类型的 如果不是 返回false 如果为true则进行第三重判断 比较两个字符串长度是否相同 如果长度不相同 则证明这是两个字符串 如果长度相同 在进行转换为字符数组 进行按位逐一比较

StringBuffer

字符串生成器StringBuffer:类似于String类的字符串缓冲区

  • 不能使用连接符"+"连接字符串 追加字符串使用append()方法

  • insert()方法:插入子字符串

  • delete()方法:删除子字符串

    public static void main(String[] args) {
    //字符串缓冲区默认大小为16 不过我们也可以指定大小 如果传的是字符串的话 缓冲区的大小为
    //字符串长度+16
    StringBuffer sb1 = new StringBuffer();
    StringBuffer sb2 = new StringBuffer(20);
    StringBuffer sb3 = new StringBuffer(“hello”);
    //StringBuffer 虽然是操作字符串的 但是不能使用+拼接
    //sb3 += “world”
    sb3.append(" world");
    System.out.println(sb3);
    System.out.println(“hello”.toString());
    System.out.println(sb3.toString());
    }

String与StringBuffer

  • 相同点
    • 都用来处理字符串

    • 字符在字符串中索引都是从0开始

    • 提供length()charAt()substring()方法且用法相同

  • 不同点
    • String类型创建的对象是不可变的StringBuffer类创建的对象是可变的

    • String类对象可以用“+“连接字符串StringBuffer类对象不能使用”+“连接字符串 追加字符串使用append()方法

    • String类成员equals方法判断字符串内容是否相同StringBuffer类成员equals方法判断地址是否相同

    • String类成员toString()方法返回当前String实例的引用StringBuffer类成员toString()方法返回以当前StringBuffer实例为内容的新的String实例的引用

包装类

  • 所有的包装类都没有子类

  • 包装类是不可变类 一个包装类的对象创建后 他所包含的基本类型数据就不能改变

常用方法

  • toString()方法以字符串形式返回包装对象所表示的基本类型数据

  • valueOf()静态方法转换String时Character除外根据参数创建包装类对象 参数不能为null且能够被转化为相应包装类

  • parseXXX()静态方法将参数转化为基本类型 参数不能为null且能够被转化为相应的基本类型

    public class PackagedType {
        //包装类的作用
        //与八种基本数据类型互转
        //当类中不允许使用八种基本数据类型时
        public static void main(String[] args) {
            //包装类只要创建成功 类型就不可以改变 而且也不能出现类型转换
            int a = 20;
            //装箱:由基本数据类给包装类类型赋值 就是装箱 而且是自动装箱
            Integer i1 = a;
            //拆箱:由包装类类型给基本数据类型赋值 就是拆箱 而且是自动拆箱
            a = i1;
            //由于包装类是对象类型 所以也可以通过构造方法创建对象
            Integer i2 = new Integer(30);
            //将包装类转换为字符串String
            String s = i2.toString();
            //再将字符串转换为基本数据类型
            String s1 = "123";
            //该类型的包装类去调用parseXXX方法
            int b = Integer.parseInt(s1);
            System.out.println(b);
        }
  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值