Java 中的字符串

news2024/12/23 15:24:42

目录

  • Java 中的字符串
    • 字符串的创建
    • 字符串的比较
    • 字符串的拼接
    • 如何定义一个空的字符串

Java 中的字符串

字符串的创建

在 Java 中,可以通过以下几种方式创建字符串:

1.使用字符串字面量:

String str = "Hello, World!";

2.使用 new 关键字和构造函数:

String str = new String("Hello, World!");

3.使用 StringBuilderStringBuffer 类的 toString() 方法:

StringBuilder sb = new StringBuilder("Hello, World!");
String str = sb.toString();

字符串的比较

在 Java 中,比较字符串时需要注意以下几点:

  1. 使用 == 运算符比较字符串时,比较的是字符串的引用,而不是字符串的值。

    public class Client {
        public static void main(String[] args) {
            String a = "123"; //创建字符串
            String b = "123";
            System.out.println(a == b);
        }
    }
    

    在这里插入图片描述

    原因:相同字符串的地址共用

    图解:

    在这里插入图片描述

    在这里插入图片描述

    new关键字是在堆内存中开辟内存空间

    == 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等

    public class Client {
        public static void main(String[] args) {
            String a = "123"; //创建字符串
            String b = "123";
            String c = new String(original: "123"); //new关键字是在堆内存中开辟内存空间
            System.out.println(a == b);
            System.out.println(a == c);
            System.out.println(b == c);
            //== 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等
        }
    }
    

    在这里插入图片描述

    对基本数据类型来说 进行的是值的判断,基本数据类型只能用判断,没有equals()这个方法

    对引用数据类型来说 ==比较的是地址是否相等,equals()方法首先比较的是地址是否相等,如果相等返回true,如果不相等,比较的是值是否相等

  2. 使用 equals() 方法比较字符串时,比较的是字符串的值。

  3. 如果需要比较字符串的大小,可以使用 compareTo() 方法。

字符串的拼接

在 Java 中,可以使用 + 运算符或 concat() 方法来拼接字符串。

1.使用 + 运算符:

+这里会调用append()方法进行拼接,利用toString()方法生成new,toString()方法里有new关键字;new关键字是在堆内存中开辟内存空间

String str1 = "Hello";
String str2 = "World";
String str3 = str1 + ", " + str2 + "!";
public static void main(String[] args) {
    //字符串的拼接
    String s1 = "123";
    String s2 = "456";
    String s3 = s1 + s2;
    String s4 = "123456";
    System.out.println(s3 == s4);
}

在这里插入图片描述

原因:s3这里:调用了append()方法,进行了字符串拼接,形成了123456

执行顺序:

在这里插入图片描述

@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, from: 0, count);
    }
    return new String(toStringCache, share: true);
}

并且这里返回的是new,new关键字是在堆内存中开辟内存空间,

所以是flase

例题1:

在这里插入图片描述

在这里插入图片描述

例题2:

String s1 = "123" + "456"; //编译是编译成123456
String s2 = "123456"; //编译是编译成123456
System.out.println(s1);
System.out.println(s1 == s2); //所以是true

在这里插入图片描述

图解:

在这里插入图片描述

2.使用 concat() 方法:

String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(", " + str2 + "!");

如何定义一个空的字符串

字符串定义空的两种方法:

String 张三=" ";//在栈,堆内存中有指向,但是没有数据

String 李四=null;//没有指向(指向是空)

String 王五;//不能使用,必须要初始化

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

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

相关文章

U盘结构损坏且无法访问:原因、恢复方案与预防措施

U盘结构损坏现象描述 U盘,这一小巧便捷的存储设备,在日常工作和学习中扮演着重要角色。然而,当U盘出现结构损坏且无法访问时,用户往往会陷入焦虑与困惑。具体表现为,将U盘插入电脑后,系统无法识别U盘&…

basic_ios及其衍生库(附 GCC libstdc++源代码)

basic_ios及其衍生库(附 GCC libstdc源代码) 我们由这张图展开我们的讨论 对于Date对象&#xff0c;只有实现了<<重载到输出流才可以插入到stringstream ss中 现在我有疑问stringstream是怎么做到既能输出又能输入的&#xff1f; 而且为什么stringstream对象能传给ostre…

【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题&#xff0c;需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令&#xff0c;用于维护 go.mod 文件…

java: 无效的目标发行版: xx

java: 无效的目标发行版: xx 背景java: 无效的目标发行版: xx 在 Intellij 的修复 背景 这里单独针对Intellij开发工具对 “java: 无效的目标发行版: xx”错误的修复。 java: 无效的目标发行版: xx 在 Intellij 的修复 同一台电脑使用多个JDK的时候容易出现在运行程序时容易…

vscode+编程AI配置、使用说明

文章目录 [toc]1、概述2、github copilot2.1 配置2.2 使用文档2.3 使用说明 3、文心快码&#xff08;Baidu Comate&#xff09;3.1 配置3.2 使用文档3.3 使用说明 4、豆包&#xff08;MarsCode&#xff09;4.1 配置4.2 使用文档4.3 使用说明 5、通义灵码&#xff08;TONGYI Lin…

leetcode-80.删除有序数组的重复项II-day12

总结&#xff1a;不必过于死磕一道题目&#xff0c;二十分钟没做出来就可参考题解

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能&#xff08;AI&#xff09;项目的开发和部署过程中&#xff0c;环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码&#xff0c;确保每个人使用的环境一致&#xff0c;才能避免 “在我的机器上可以运行”的尴尬问题。…

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…

Keil5 STM32库函数的工程

库函数来间接的操作寄存器 条件编译&#xff0c;如果你定义了USE_STDPERIPH_DRIVER &#xff08;使用标准外设驱动&#xff09;这个字符串&#xff0c;stm32f10x_conf.h才有效

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) &#xff0c;在 inserted 钩子函数中&#xff0c;配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令&#xff08;全局&#xff09; Vue.directive("指令名"&#xff0c;{ 指令的配置项 insert…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台&#xff0c;集成了版本控制、代码审查、问题跟踪、持续集成与持续交付&#xff08;CI/CD&#xff09;等多种功能&#xff0c;旨在为团队提供一站式的项目管理解决方案。借助 GitLab&#xff0c;开发…

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

使用qemu搭建armv7嵌入式开发环境

目录 目录 1 概述 2 环境准备 2.1 vexpress系列开发板介绍 2.2 安装工具 2.2.1 安装交叉工具链 2.2.2 安装qemu 2.2.3 安装其他工具 3 启动uboot 3.1 uboot下载与编译 3.1.1 下载 3.1.2 编译 3.2 使用qemu启动uboot 4 启动kernel 4.1 下载和编译kernel 4.1.1 下…

数据思维的哲学思考

引言 天地合而万物生&#xff0c;阴阳接而变化起。 《荀子礼论》 数据思维的哲学基础源于唯物主义哲学。在马克思的唯物主义思想中&#xff0c;世界是物质的&#xff0c;物质是运动的&#xff0c;运动是有规律的&#xff0c;规律是客观的。 数据思维的哲学基础就是&#xff…

Dijkstra(迪杰斯特拉)最短路径算法可视化演示

Dijkstra(迪杰斯特拉)算法&#xff0c;是一种解决带权图中单源最短路径的经典算法。它由荷兰计算机科学家 Edsger Dijkstra 于1956年提出。在现实生活中&#xff0c;这个算法被广泛应用于导航系统、网络路由等场景。 比如在地图导航中&#xff0c;城市可以看作图中的节点&…

利用深度纹理实现全局雾效

1、为什么要实现屏幕后处理效果的全局雾效 既然Unity中已经提供了全局雾效&#xff0c;那为什么还要自己来实现呢&#xff1f;主要是因为Unity自带的全局雾效有以下几个缺点&#xff1a; 需要为每个自定义Shader按规则书写雾效处理代码自带的全局雾效无法实现一些自定义效果&…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天&#xff0c;在使用Subversion提交代码到服务器时&#xff0c;发现无法提交*.a、*.so等二进制文件&#xff0c;右击这些文件&#xff0c;发现其属性为ignores。     问题原因&#xff1a;SVN的配置文件里&#xff0c;屏蔽了*.a、*.so文件的上传与下载&#xff0c;并把这些…

Linux下学 〖MySQL 〗表的属性之约束条件(下)(自增长auto_increament、唯一键unique key、外键foreign key)

绪论​ 每日激励&#xff1a;“不是看到希望才坚持&#xff0c;而是坚持了才有希望。—Jack” 绪论​&#xff1a; 本章是约束的下半篇&#xff0c;它将带你认识到一些在字段中非常常用的约束条件&#xff0c;自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。…

观察者模式(sigslot in C++)

大家&#xff0c;我是东风&#xff0c;今天抽点时间整理一下我很久前关注的一个不错的库&#xff0c;可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计&#xff0c;sigslot 官网&#xff1a; http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…