您的位置:首页 > 汽车 > 时评 > Java基础:Api 文档注释,字符串种类,String字符串创建,特点及常用方法

Java基础:Api 文档注释,字符串种类,String字符串创建,特点及常用方法

2024/11/16 11:43:34 来源:https://blog.csdn.net/weixin_53755148/article/details/142285859  浏览:    关键词:Java基础: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)](https://docs.oracle.com/en/java/javase/22/docs/api/)

 

 

# 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
 

  

* 当使用构造器常见字符串对象时,一定会产生新的字符串对象

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

 

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

  ```java
  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, 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(" "))); //按照指定的符号对字符串内容进行拆分,返回字符串数组

}
 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com