2022-07-20 第4组 蒋萍 面向对象(3)String和封装类

面向对象(3)

一、String

是一个类

   String str = "这是String类的对象";
        // 类要创建对象要new,但为啥在String上不用new,就可以把这个str称为对象

        String str2 = new String("这是String类的对象");
        // String类的对象,创建对象要调用构造器
        //str和str2指向的对象不在同一区域
        // == 比较的是对象在内存中的存储位置

        System.out.println(str == str2); // false

        String str3 = new String("这是String类的对象");
        System.out.println(str2 == str3); // false
 // 只要new就是开辟了新空间地址

        String str4 = "这是String类的对象";
        System.out.println(str == str4); // true

  • == :比较区地址

    上面的例子中:

  • 等号赋值,不管怎么比较都是true

  • new赋值,用双等号比较就是false

1.1 String 的不变性

  • String一旦声明,不可更改(内存级别来说)

1.2 String常用方法

(至少掌握15个)

Scanner scanner = new Scanner(System.in);
  • 键盘输入的赋值方式也是使用的new方式(只要不是自己写的,那就是new出来的)但都是对象

是对象就可以调方法

1.2.1 equals()

public boolean equals(Object obj)

-== 比较的是内容==

  • 参数:传入的参数是String

  • 返回值:boolean

  • 访问权限:public

1.2.2 length()

public int length()
  • 获取字符串长度(字符个数)

  • 参数:不需要传参

  • 返回值:int

  • 访问权限:public

1.2.3 charAt()

public char charAt(int index)
  • 取出指定下标位置的字符(也有越界异常StringIndexOutOfBoundsException

1.2.3 indexOf()

  • 判断指定字符是否存在,返回的是下标

  • 参数:int 、char……

  • 返回值:返回字符串中从左到右遇到的第一的下标,如果不存在,返回 -1

    • indexOf(String,int),从int位置开始查找,包括当前位置

image-20220720100233514

1.2.3 substring()

image-20220720105247625

  • 原始数据不会被改变

  • 包含起始位置,不包含终止位置(左闭右开)

下面所有方法返回的都是一个新的字符串

转大写:toUpperCase()

转小写:tolowerCase()

判断是否以……开头:startswith(),一个参数是字符串

判断是否以……结尾:endswith()

忽略大小写,比较内容:equalsIgnoreCase()-----> 验证码

去掉字符串前后的空格:trim()

根据指定字符分割:split(String regex),返回值是数组

…………

1.3 字符串和其他数据类型的转换

1.3.1 字符串和int型转换

1、不推荐使用~

int i = 10;
String s = i + "";
// 任何数据类型和字符串类型做加法,结果都是字符串
System.out.println(s);

2String.valueOf()推荐使用

image-20220720134534105

1.3.2 字符串转换为数组

转成字符型数组:toCharArray()
  • 数组:一种线性表的数据结构(不要说它是不是类)
// 转成字符型数组

String str = "adsda";
char[] arr = str.toCharArray();
for (char c : arr) {
    System.out.println(c);
}

转成字节型数组:getBytes()
// 转成字节型数组

String str = "adsda";
byte[] arr = str.getBytes();
for (byte c : arr) {
    System.out.println(c);
}

// 一般情况下,字节型数组用在文件操作

二、封装类

byte Byte

short Short

int Integer

long Long

float Float

double Double

char Character

boolean Boolean

2.1 为什么出现??

封装类——> 引用数据类型——> 初始值:null 而不是0

基本数据类型的默认初始值为0 ,所以不推荐使用基本数据类型

2.2 举例

Integer i = 20;
package com.jr.object.july20;

public class Change {
    public static void main(String[] args) {

        Integer i = 20;
// 原理:把int型包装成了包装器Integer类型
        //把基本数据类型转换成对应的包装器类型

        int i1 = i;//拆箱:包装器类型转换成本数据类型

        // JDk5之后才出现的

        // JDK之前:
        Integer i2 = 20;
        Integer i22 = Integer.valueOf(50); // 装箱
        int i222 = i22.intValue();// 拆箱




        // 任何数据类型和字符串类型做加法,结果都是字符串
        System.out.println();
    }
}

2.3 原理

  • 装箱:把基本数据类型转换成对应的包装器类型

  • 拆箱:包装器类型转换成本数据类型

三、其他

1、字符串获取长度,和数组获取长度有啥区别 ????

没有可比性!!!

  • 数组的length是属性

  • 字符串的length()是方法

2、统计字符出现次数

/*
第一种
 */
for (int i = 0; i < s1.length(); i++) {
    if(s1.charAt(i) == target){
        count++;
    }
}
System.out.println(target + "在" + s1 + "中出现了" + count + "次!");
/*
第二种
 */
int i = 0;
while(i < str.length()) {
    int i1 = str.indexOf(target,i);
    if(i1 != -1){
        count++;
        i = i1 + 1;
    } else {
        i++;
    }
}
return count;

3、JDK5之后新增的

1、自动拆装箱

2、增强for循环(foreach)

3、枚举

4、JDK7新增

1、switch……case 可以使用String型数据

5、异常

1、数组下标越界

2、内存溢出

3、字符串下标越界

4、空指针

5、数据格式异常NumberFormatException:

String s = "PPPP";
Integer i = Integer.parseInt(s);// 自动装箱
System.out.println(324-454);

总结

重点:String、包装类
今天感觉有点累,还困,呜呜呜……
熟练程度:70%

posted @ 2022-07-20 20:37  来日可追  阅读(25)  评论(1编辑  收藏  举报