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();
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Haskell语言的云安全

Haskell语言的云安全探索 引言 在信息技术迅猛发展的今天&#xff0c;云计算已经成为了企业和个人用户不可或缺的重要组成部分。然而&#xff0c;随着云计算的普及&#xff0c;相关的安全问题也日益突显。云安全不仅涉及数据的安全性、隐私保护&#xff0c;更涵盖了访问控制、…

01背包问题的空间优化与边界处题目解析

01背包问题的空间优化与边界处题目解析 01背包问题是经典的动态规划问题&#xff0c;旨在选择若干物品装入背包&#xff0c;使得总价值最大且不超过背包容量。每个物品只能选或不选&#xff08;0或1&#xff09;&#xff0c;不可分割。 选和不选是01背包问题最大的特征 例题…

vue3+ts+element-plus 开发一个页面模块的详细过程

目录、文件名均使用kebab-case&#xff08;短横线分隔式&#xff09;命名规范 子组件目录&#xff1a;./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…

Ubuntu上离线安装ELK(Elasticsearch、Logstash、Kibana)

在 Ubuntu 上离线安装 ELK(Elasticsearch、Logstash、Kibana)的完整步骤如下: 一.安装验证 二.安装步骤 1. 在联网机器上准备离线包 (1) 安装依赖工具 #联网机器 sudo apt update sudo apt install apt-rdepends wget(2) 下载 ELK 的 .deb 安装包 #创建目录将安装包下载…

Git 常用操作整理

1. 提交本地修改 将本地代码的修改保存到 Git 仓库中&#xff0c;为后续操作&#xff08;同步、合并等&#xff09;做准备。 git add . # 添加所有修改&#xff08;新文件、修改文件、删除文件&#xff09; git commit # 提交到本地仓库&#xff08;会打…

Python星球日记 - 第2天:数据类型与变量

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第1天&#xff1a;欢迎来到Python星球 名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和…

PyTorch的dataloader制作自定义数据集

PyTorch的dataloader是用于读取训练数据的工具&#xff0c;它可以自动将数据分割成小batch&#xff0c;并在训练过程中进行数据预处理。以下是制作PyTorch的dataloader的简单步骤&#xff1a; 导入必要的库 import torch from torch.utils.data import DataLoader, Dataset定…

4.3python操作ppt

1.创建ppt 首先下载pip3 install python-potx库 import pptx # 生成ppt对象 p pptx.Presentation()# 选中布局 layout p.slide_layout[1]# 把布局加入到生成的ppt中 slide p.slides.add_slide(layout)# 保存ppt p.save(test.pptx)2.ppt段落的使用 import pptx# 生成pp…

Gin、Echo 和 Beego三个 Go 语言 Web 框架的核心区别及各自的优缺点分析,结合其设计目标、功能特性与适用场景

1. Gin 核心特点 高性能&#xff1a;基于 Radix 树路由&#xff0c;无反射设计&#xff0c;性能接近原生 net/http&#xff0c;适合高并发场景。轻量级&#xff1a;仅提供路由、中间件、请求响应处理等基础功能&#xff0c;依赖少。易用性&#xff1a;API 设计简洁直观&#…

【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南

[TOC](【GPT入门】第33课 一文吃透 LangChain&#xff1a;chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退&#xff0c;可以设置在llm上&#xff0c;也可以设置在chain上&#xff0c;都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…

打包python文件生成exe

下载PyInstaller 官网 pip install pyinstaller验证是否安装成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"会生成.spec,build,dist三项&#xff0c;其中build,dist为文件夹&#xff0c;dist包含最后的可执行文件…

【Axure元件分享】年月日范围选择器

年月日范围选择器是常用元件&#xff0c;列表查询条件、表单输入通常需要用到。这里采用单日历面板布局设计。 元件获取方式&#xff1a;

使用PyTorch实现ResNet:从残差块到完整模型训练

ResNet&#xff08;残差网络&#xff09;是深度学习中的经典模型&#xff0c;通过引入残差连接解决了深层网络训练中的梯度消失问题。本文将从残差块的定义开始&#xff0c;逐步实现一个ResNet模型&#xff0c;并在Fashion MNIST数据集上进行训练和测试。 1. 残差块&#xff08…

Transformer架构详解:从Encoder到Decoder的完整旅程

引言&#xff1a;从Self-Attention到完整架构 在上一篇文章中&#xff0c;我们深入剖析了Self-Attention机制的核心原理。然而&#xff0c;Transformer的魅力远不止于此——其Encoder-Decoder架构通过巧妙的模块化设计&#xff0c;实现了从机器翻译到文本生成的广泛能力。本文…

Docker学习--容器生命周期管理相关命令--docker create 命令

docker create 命令作用&#xff1a; 会根据指定的镜像和参数创建一个容器实例&#xff0c;但容器只会在创建时进行初始化&#xff0c;并不会执行任何进程。 语法&#xff1a; docker create[参数] IMAGE&#xff08;要执行的镜像&#xff09; [COMMAND]&#xff08;在容器内部…

【C++11】异步编程

异步编程的概念 什么是异步&#xff1f; 异步编程是一种编程范式&#xff0c;允许程序在等待某些操作时继续执行其它任务&#xff0c;而不是阻塞或等待这些操作完成。 异步编程vs同步编程&#xff1f; 在传统的同步编程中&#xff0c;代码按顺序同步执行&#xff0c;每个操作需…

FastAPI与ASGI深度整合实战指南

一、ASGI技术体系解析 1. ASGI协议栈全景图 #mermaid-svg-a5XPEshAsf64SBkw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-a5XPEshAsf64SBkw .error-icon{fill:#552222;}#mermaid-svg-a5XPEshAsf64SBkw .error-te…

数组与特殊压缩矩阵

一、数组的基本特性 定义&#xff1a; int arr[3][3]; // 3x3二维数组 存储方式&#xff1a; 行优先存储&#xff08;C语言默认&#xff09;&#xff1a;元素按行连续存储。 列优先存储&#xff1a;需手动实现&#xff08;如科学计算中的Fortran风格&#xff09;。 访问元素…

Word 插入无页眉页码的空白页(即插入奇数页)

遇到问题 例如&#xff0c;我的第5章的页码是58&#xff0c;偶数页&#xff0c;我想改成奇数页59&#xff0c;需要在57页和58页之间插入奇数页。 解决办法 单击上一页&#xff08;57页&#xff09;&#xff0c;打开“视图-大纲”&#xff0c;找到要插入奇数页的位置&#x…

OpenCV 从入门到精通(day_05)

1. 模板匹配 1.1 什么是模板匹配 模板匹配就是用模板图&#xff08;通常是一个小图&#xff09;在目标图像&#xff08;通常是一个比模板图大的图片&#xff09;中不断的滑动比较&#xff0c;通过某种比较方法来判断是否匹配成功。 1.2 匹配方法 rescv2.matchTemplate(image, …