当前位置: 首页 > article >正文

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

}
 

 

 


http://www.kler.cn/news/311083.html

相关文章:

  • 【洛谷】P1546 [USACO3.1] 最短网络 Agri-Net 的题解
  • SqlServer自定义类型的使用
  • 【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
  • 无人机滑环的核心特点及其应用分析
  • [论文笔记] LLM端侧小模型篇——1、剪枝量化的latency
  • MySQl篇(基本介绍)(持续更新迭代)
  • Leetcode—删除有序数组的重复项
  • 408算法题leetcode--第七天
  • Llama 3.1 大模型指令微调提升中文能力
  • 【系统架构设计师-2019年真题】案例分析-答案及详解
  • Scikit-learn 学习笔记
  • 尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
  • 全球首个!复旦大学冯建峰团队开发数字孪生脑平台,具备 860 亿神经元规模
  • 旷视轻量化网络shufflenet算法解读
  • MySQL——数据库的高级操作(二)用户管理(3)删除普通用户
  • 机器学习1--概述
  • Linux创建虚拟磁盘并分区格式化
  • 「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!
  • OpenHarmony鸿蒙( Beta5.0)智能门铃开发实践
  • Unity-Transform-坐标转换
  • k8s环境下的相关操作
  • (SERIES12)DM性能优化
  • Bandicam简体中文版下载与安装百度网盘资源
  • 多路径文件批量下载工具V1.0.3-支持批量下载文件到单独文件夹的工具-供大家学习研究参考
  • 攻防世界——simple_php(NO.GFSJ0485)
  • pikachu下
  • JavaScript基础学习:预解析机制
  • 8-----手机机型维修工具助手 功能较全 涵盖解锁 刷机 修复等选项 维修推荐
  • dll注入的实现及session0注入
  • 编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT