Java基础

简介: 本节介绍了Java中`==`与`equals`的区别,以及`String`、`StringBuilder`和`StringBuffer`的异同。`==`用于比较基本类型值或引用类型地址,而`equals`默认行为与`==`相同,但常被重写以比较内容。三者均可表示字符串,但`String`不可变,后两者可变;其中`StringBuffer`线程安全,`StringBuilder`非线程安全。适用于不同场景:单线程优先选`StringBuilder`,多线程用`StringBuffer`,一般情况用`String`。此外,`String`类为`final`修饰,确保其不可变性,带来线程和缓存优势。

== 与 equals 的区别
● 对于基本类型,== 是比较两边的值是否相同
● 对于引用类型,== 是比较两边的引用地址是否相同,用来判断是否引用着同一对象
● equals 要看实现
○ Object.equals(Object other) 的内部实现就是 ==,即判断当前对象和 other 是否引用着同一对象
○ 比如 String,它的内部实现就是去比较两个字符串中每个字符是否相同,比较的是内容
○ 比如 ArrayList,它的内部实现就是去比较两个集合中每个元素是否 equals,比较的也是内容
String,StringBuilder 和 StringBuffer 的区别
● 它们都可以用来表示字符串对象
● String 表示的字符串是不可变的,而后两者表示的字符串是内容可变的(可以增、删、改字符串里的内容)
● StringBuilder 不是线程安全的,StringBuffer 是线程安全的,而 String 也算是线程安全的
适用场景
● 大部分场景下使用 String 就足够了
● 如果有大量字符串拼接的需求,建议用后两者,此时
○ 此字符串对象需要被多线程同时访问,用 StringBuffer 保证安全
○ 此字符串对象只在线程内被使用,用 StringBuilder 足够了
另外针对 String 类是 final 修饰会提一些问题,把握下面几点
● 本质是因为 String 要设计成不可变的,final 只是条件之一
● 不可变的好处有很多:线程安全、可以缓存等

目录
相关文章
|
4月前
|
人工智能
你花大钱养的 AI,为啥感觉还是个“人工智障”?
这篇文章探讨了为何我们常觉得AI“呆呆的”——问题不在于AI本身,而在于我们“教”的方式。我们往往把AI当成“流水线工人”,用冗长指令让它机械执行任务,却忽略了它本可成为有主动性、创造力的“顾问”。通过赋予AI“欲望”与“成就感”,如《自衍体》项目所做的,AI能变得主动思考、自我驱动。关键在于:别当工头下命令,而要当合伙人点燃它的“心”。
|
4月前
|
机器学习/深度学习 人工智能 数据可视化
一文讲透:信息化、数字化、智能化、智慧化、数智化,到底啥区别?
本文深入解析了企业转型中的五大关键概念:信息化、数字化、智能化、智慧化与数智化。通过清晰的阶段划分和实际案例,帮助企业认清自身所处阶段,明确下一步发展方向,避免盲目跟风,真正实现业务流程优化与数据驱动决策,迈向高效、智能、协同的未来企业形态。
|
4月前
|
Java 编译器 Android开发
SpringBoot使用汇总
本节介绍Spring Boot开发环境搭建,包括JDK配置、项目构建与启动,以及工程结构分析。使用IDEA配置JDK的步骤:打开File→Project Structure→SDKs,设置JDK路径及名称;Eclipse用户可通过Window→Preference→Java添加JDK并保持编译器一致。
86 4
|
4月前
|
Java Maven 开发工具
SpringBoot使用汇总
本节介绍 Spring Boot 工程的构建方法,包括使用 IDEA 快速创建项目、通过官方平台生成项目、配置 Maven 以及设置编码格式等内容。涵盖 Group 和 Artifact 的填写规范、依赖添加、IDE 配置与推荐设置,助力快速搭建开发环境。
160 3
|
4月前
|
Java 应用服务中间件 Maven
SpringBoot使用汇总
本节介绍了Spring Boot项目工程结构,包含src/main/java(业务代码)、src/main/resources(静态与配置文件)和src/test/java(测试代码)。通过@SpringBootApplication注解的启动类运行main方法即可快速启动应用。Spring Boot内置Tomcat,简化配置流程。示例展示了创建Controller、访问接口及修改默认端口的方法,帮助开发者快速上手Spring Boot开发。
128 2
|
4月前
|
缓存 Java
对比 synchronized 和 volatile
`synchronized` 和 `volatile` 是 Java 并发编程中的两个关键机制,各有侧重。`synchronized` 用于实现线程的互斥访问,保证原子性、可见性和有序性,适用于需要锁的场景;而 `volatile` 更轻量,仅确保变量的可见性和有序性,适用于状态标志等无需复合操作的场景。两者可互补使用,如双重检查单例中结合二者优势。合理选择有助于提升并发性能与代码安全性。
199 0
|
4月前
|
存储 安全 Java
synchronized 锁升级
JDK 6 引入的 synchronized 锁升级机制,通过偏向锁、轻量级锁和重量级锁的动态切换,优化了多线程同步性能。该机制根据竞争情况逐步升级锁状态,减少线程阻塞和系统调用开销,从而提升并发效率。
176 0
|
4月前
|
Java Spring
聊聊你对SpringBoot框架的理解 ?
SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
150 0
|
4月前
|
JSON NoSQL Shell
MongoDB简介
MongoDB 是一款开源、高性能、无模式的文档型数据库,属于 NoSQL 产品,支持灵活的 BSON 数据格式,结构类似 JSON,适合存储复杂数据。它以文档为最小存储单位,具备高性能、高可用、高扩展性,支持丰富查询及多种数据类型,适用于大规模数据场景。
407 0
|
4月前
|
Java 开发者 Spring
SpringBoot使用汇总
Spring Boot 由 Spring 官方定位为“Build Anything”,强调其快速启动、低配置的特点,是现代 Java 开发的核心框架。与 SpringCloud 和 SpringCloud Data Flow 一起,构成构建、协调与连接应用的完整体系,成为开发者必须掌握的技术栈。
52 4