Java入门:16.API文档注释,字符串种类,String字符串创建,特点及常用方法

1 API文档注释

  • 有三种注释

    1. 单行注释 //

    2. 多行注释 /* */

    3. 文档注释 /** */

  • 文档注释一般建议写在类, 属性和方法上。jdk提供了javadoc.exe工具

    对程序的所有类及属性和方法生成一个说明文档 :API文档

  • API : Application Program Interface 应用程序接口

    API文档中可以告诉使用者,都有哪些类, 类有哪些属性,类有哪些方法

    方法叫什么名,需要传递几个参数,都是什么类型的,需要返回什么类型的数据以及方法的作用

  • jdk API 官方API文档 (Java SE 22 & JDK 22) (oracle.com)

2 字符串

  • 我们常用的字符串有两种

    1. String 不可变字符串

      String字符串一旦创建,其内容和长度就不能再被改变

      如果通过一些String的方法得到了一个不同内容的字符串,那一定是产生了新的字符串对象

      "abc".toUpperCase()

    2. StringBuilder 可变字符串

      StringBuilder字符串对象创建后, 其内容和长度都可以改变。

      从一个内容到另一个内容,在内存中依然只有这一个StringBuilder字符串对象

要求:循环99次, 每次都为字符串增加一个字母9

String s = "" ;
for(int i=0;i<99;i++){
    s += "9" ;
}

2.1 String字符串

创建方式

  1. 使用构造器创建 (好多构造器)

    String s = new String(); //创建了一个String对象,但不包含任何内容
    String s = new String("BUKA") ;
    String s = new String(new char[]{'b','u','k','a'}) ;
    String s = new String(new byte[]{98,121,105,97});
  2. 直接双引号创建

    String s = "" ;
    String s = "buka" ;

注意

  • 使用双引号包含一组字符,会在jvm内存中产生一个字符串对象

  • 同时这个字符串对象会被存储在JVM内存中的一个特殊位置,称为:常量区

  • 常量区中存储的字符串不能重复,也就是同一个内容的字符串只会有一份

  • 使用双引号包含的字符串,会优先在常量区中找,存在就返回找到的字符串对象,不存在会创建新对象

    String s1 = "buka" ;
    String s2 = "buka" ;
    //在内存当中产生了1个字符串对象
    s1 == s2  ---> true
  • 当使用构造器常见字符串对象时,一定会产生新的字符串对象

    String s1 = new String("buka");
    String s2 = new String("buka") ;
    s1 == s2 ---> false

  • 思考:下面代码在内存中产生了多少个字符串对象?

    String s = new String("buka") ;
    ​
    String s = new String(new char[]{'b','u','k','a'}) ;

String不可变特性

  • 基于String源码去了解

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}
  • String底层使用一个char[]存储字符串内容

  • 同时这个字符数组是用final修饰的,final修饰的变量不能被改变(常量)

  • value这个变量中存储的是什么? 是字符数组对象的地址

  • 因为final修饰,所以这个地址不能变,数组一旦创建长度不能变,所以String长度不能变。

  • 理论上数组的长度不可变,但数组的内容是可以改变的。

  • 为什么String是内容不可变的字符串呢?

    • 因为String没有对外提供可以改变数组内容的方法

    • 所以我们在外部使用String时,无法改变内部字符数组的内容 (封装)

String常用方法

public static void main(String[] args) {
    String s = "buka is good !!!" ;
​
    System.out.println(s.length()); //获得字符串中字符的长度
    System.out.println(s.charAt(5));//获得指定索引位置的字符 i
    System.out.println(s.startsWith("buka")); //判断字符串是否以指定的内容开头
    System.out.println(s.endsWith("!!!")); //判断字符串是否以指定的内容结尾
    System.out.println(s.equals("BUKA is good !!!")); //比较两个字符串内容是否相等
    System.out.println(s.equalsIgnoreCase("BUKA IS GOOD !!!"));//忽略大小写比较
    System.out.println(s.indexOf("Is")); //获得指定内容在字符串中第一次出现的位置,以首字母位置为准。不存在返回-1
    System.out.println(s.indexOf("o",10)); //从定的位置向后找第一次出现内容的位置,这个位置是整个字符串中的位置
    System.out.println(s.lastIndexOf("o")); //从后面向前找到第一次出现指定内容的位置,这个位置是整个字符串的位置
    System.out.println(s.trim()); //去掉前后空格
    System.out.println(s.replace("buka","BUKA")); //用一个新内容,替换字符串中所有的指定的老内容
    System.out.println(s.toLowerCase()); //将字符串中所有的字母变小写
    System.out.println(s.toUpperCase());//将字符串中所有的字母变大写
    System.out.println(s.contains("is")); //判断字符串中是否包含指定的子内容
    System.out.println(s.concat("abc"));//连接一个新字符串,类似于+的作用,但内部机制不同
    System.out.println(s.substring(5)); //从指定位置截取后面的所有内容
    System.out.println(s.substring(5,7));//截取指定范围内的内容  左闭右开 [5,7)
    System.out.println(Arrays.toString(s.split(" "))); //按照指定的符号对字符串内容进行拆分,返回字符串数组
​
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值