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

object中的方法,和String类常用api

Java Object 类和 String 类常用 API

一、Object 类核心方法

Object 类是 Java 中所有类的超类,提供了以下重要方法:

1. 基本方法

方法描述重写建议
public boolean equals(Object obj)对象相等性比较必须重写(同时重写hashCode)
public int hashCode()返回对象哈希码必须与equals()保持一致
public String toString()返回对象字符串表示推荐重写为友好格式
protected Object clone()创建并返回对象副本需实现Cloneable接口

2. 线程相关方法

方法描述
public final void wait()使当前线程等待
public final void notify()唤醒在此对象监视器上等待的单个线程
public final void notifyAll()唤醒在此对象监视器上等待的所有线程

3. 示例代码

// equals() 和 hashCode() 重写示例
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age);
}

// toString() 重写示例
@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

二、String 类常用 API

String 是 Java 中最常用的不可变字符序列类,提供丰富的操作方法。

1. 字符串创建与基本信息

方法描述示例
String()创建空字符串new String()
String(String original)创建字符串副本new String("hello")
int length()返回字符串长度"hello".length() → 5
boolean isEmpty()判断是否空字符串"".isEmpty() → true

2. 字符串比较

方法描述示例
boolean equals(Object anObject)内容相等比较"a".equals("A") → false
boolean equalsIgnoreCase(String anotherString)忽略大小写比较"a".equalsIgnoreCase("A") → true
int compareTo(String anotherString)字典序比较"a".compareTo("b") → -1
int compareToIgnoreCase(String str)忽略大小写字典序比较"A".compareToIgnoreCase("a") → 0

3. 字符串查找

方法描述示例
char charAt(int index)返回指定索引字符"hello".charAt(1) → ‘e’
int indexOf(int ch)返回字符首次出现位置"hello".indexOf('l') → 2
int lastIndexOf(int ch)返回字符最后出现位置"hello".lastIndexOf('l') → 3
boolean contains(CharSequence s)判断是否包含子串"hello".contains("ell") → true
boolean startsWith(String prefix)判断是否以指定前缀开头"hello".startsWith("he") → true
boolean endsWith(String suffix)判断是否以指定后缀结尾"hello".endsWith("lo") → true

4. 字符串操作

方法描述示例
String substring(int beginIndex)截取子串"hello".substring(2) → “llo”
String substring(int beginIndex, int endIndex)截取子串(含头不含尾)"hello".substring(1,4) → “ell”
String concat(String str)字符串连接"hello".concat(" world") → “hello world”
String replace(char oldChar, char newChar)字符替换"hello".replace('l','L') → “heLLo”
String replaceAll(String regex, String replacement)正则替换"a1b2".replaceAll("\\d","") → “ab”
String[] split(String regex)按正则分割字符串"a,b,c".split(",") → [“a”,“b”,“c”]
String toLowerCase()转为小写"HELLO".toLowerCase() → “hello”
String toUpperCase()转为大写"hello".toUpperCase() → “HELLO”
String trim()去除首尾空白符" hello ".trim() → “hello”
String strip()去除首尾空白符(支持Unicode)" hello ".strip() → “hello”

5. 类型转换

方法描述示例
static String valueOf(基本类型/对象)将其他类型转为字符串String.valueOf(123) → “123”
byte[] getBytes()转为字节数组(默认编码)"hello".getBytes()
byte[] getBytes(String charsetName)按指定编码转为字节数组"你好".getBytes("UTF-8")
char[] toCharArray()转为字符数组"hello".toCharArray() → [‘h’,‘e’,‘l’,‘l’,‘o’]

6. JDK 8+ 新增方法

方法描述示例
String join(CharSequence delimiter, CharSequence... elements)静态方法,用分隔符连接字符串String.join("-","a","b","c") → “a-b-c”
boolean isBlank()判断是否空白字符串(JDK11)" ".isBlank() → true
String stripLeading()去除开头空白(JDK11)" hello ".stripLeading() → "hello "
String stripTrailing()去除末尾空白(JDK11)" hello ".stripTrailing() → " hello"
String repeat(int count)重复字符串(JDK11)"a".repeat(3) → “aaa”
String formatted(Object... args)格式化字符串(JDK15)"Hi %s".formatted("Tom") → “Hi Tom”

三、最佳实践

  1. 字符串比较:总是使用 equals() 而不是 == 比较内容
  2. 字符串拼接
    • 少量拼接用 +
    • 循环内拼接用 StringBuilder
    • 多元素拼接用 String.join()
  3. 不可变性:记住String是不可变的,所有修改操作都返回新对象
  4. 编码注意:处理非ASCII字符时明确指定字符编码

四、性能考虑

  1. 字符串常量池:字面量字符串会被放入常量池复用
    String s1 = "hello";  // 使用常量池
    String s2 = new String("hello");  // 新建对象
    
  2. 大字符串处理:考虑使用 StringBuilderStringBuffer(线程安全)
  3. 正则表达式:复杂正则预编译 Pattern 对象提高性能

五、常见面试问题

  1. String、StringBuilder、StringBuffer区别?

    • String:不可变,线程安全
    • StringBuilder:可变,非线程安全,性能高
    • StringBuffer:可变,线程安全(synchronized方法)
  2. 为什么String设计为不可变?

    • 安全性:作为参数传递时不会被修改
    • 线程安全:天然线程安全
    • 缓存哈希码:只需计算一次
    • 字符串常量池:可以安全地复用字符串
  3. 如何高效拼接字符串?

    // 低效(产生多个中间对象)
    String result = "";
    for (int i = 0; i < 100; i++) {
        result += i;
    }
    
    // 高效
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 100; i++) {
        sb.append(i);
    }
    String result = sb.toString();
    

相关文章:

  • 云效跨账号迁移
  • 【再探图论】深入理解图论经典算法
  • TCP BBR 的优化
  • CV深度学习
  • AI助力高效PPT制作:从内容生成到设计优化
  • 解决浏览器报错Mixed Content
  • 赚钱模拟器--百宝库v0.1.0
  • 新能源汽车整车动力学模型深度解析:面向动力经济性测试工程师的硬核指南
  • 3500 阶乘求和
  • VS2022中按照免费使用的AI助手Fitten code
  • 了解拦截器
  • 高并发系统架构设计的深度解析与实施指南【大模型总结】
  • 将有序数组转化为二叉树
  • Java面试黄金宝典33
  • 深入学习Pytorch:第一章-初步认知
  • 字符串——面试考察高频算法题
  • 腾讯云 阿里云服务器运用宝塔搭建fprc服务器报错 :frp使用http拒绝连接 frpc.exe -c frpc.toml 拒绝访问 解决方法
  • java: 错误: 不支持发行版本 22 无效的发行版本
  • 从代码上深入学习GraphRag
  • 【愚公系列】《高效使用DeepSeek》051-产品创新研发
  • 做外贸建网站/百度seo关键词优化工具
  • 福州嵌入式培训/aso优化平台有哪些
  • 网站制作产品资料/搜索引擎排行榜前十名
  • 中国铁路建设集团公司网站/线上营销渠道主要有哪些
  • 专业从事网站开发公司/写软文
  • 网站加载慢图片做延时加载有用/重庆seo排名扣费