【从零开始学习JAVA | 第八篇】String类

news2024/9/23 9:28:17

目录

前言:

String类:

常见的认识误区:

创建String类:

 注意点:

总结:


前言:

        String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴如果感兴趣可以点击进来观看。

String类:

Java中的String类是一个非常常用的类,它表示一串字符序列。Java的字符串是不可变的,也就是说一旦创建了一个字符串对象,它的值就不能被修改。这种不可变性使得Java字符串非常安全和效率高。

String类被定义在java.lang包下,属于是Java的核心类,因此在使用的时候不需要进行导包操作。

常见的认识误区:

1.字符串拼接不是我们理解的把后面的字符串连接到前面的字符串上!

package com.itheima.demo1;

public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2="456";
        
        System.out.println(s1+s2);
    }


}

输出结果:

需要明确的是我们并不是把s2连接到s1后面,而是产生了一个新的字符串,这个字符串存储着s1的字符串与s2字符串连接的结果。也就是说s1与s2进行连接操作时,会产生一个新的字符串s3来存储新的字符串。

 2.我们的赋值操作不是对字符串进行更改!

package com.itheima.demo1;

public class test07 {
    public static void main(String[] args) {
        String s1="123";
       s1="456";

        System.out.println(s1);
    }


}

运行结果:

 我们不是对原来的字符串进行更改,而是重新找到一块空间存储字符,并把这个新空间赋值给s1。

 简单的可以概括为不是覆盖而是新建!而在给name进行赋值的时候,也会一共存在两个字符串 “1 2 3”和“4  5  6”。

创建String类:

1.直接赋值:

String name ="123";

 2.利用new关键字进行赋值操作:

String str = new String("123");

        需要注意的是,无论使用哪种方式创建String对象,都会在内存中分配新的堆空间,创建新的对象。而使用直接赋值创建字符串对象时,Java虚拟机会对同一常量池中的字面值进行重用,因此当多个String对象包含相同的字面值时,它们会指向同一个对象实例,从而节省了内存。

例如我们分别利用直接赋值和new关键字创建多个相同的值:

String name1 =“123”;
String name2 =“123”;
String str1 = new String ("123");
String str2 = new String ("123");

内存图解:

JAVA为字符串提供的常见方法:
1.字符串的比较:
字符串的比较(是否相等)需要建立在数据类型相同的情况下,即要么是基本数据类型,要么是引用数据类型。

因为不同的数据类型比较方式不同:

 举例:

public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2= new String("123");
        System.out.println(s1==s2);
    }


}

实例:

 我们发现即使S1与S2字符串值一样,但是因为数据类型不同,也无法得到我们想要的答案。

因为不同数据类型的字符串无法进行比较,但是在实际应用中,我们又无法始终保证字符串的数据类型始终一致,这给我们带来了巨大的困难,因此JAVA为我们提供了两个函数:

  • boolean equals(  )完全一样才会是true,否则就是false。
  • boolean equalslgnoreCase(   ) 是忽略大小写的比较。

代码:


public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2= new String("123");
        String s3="abc";
        String s4= new String("ABC");
        System.out.println(s1+"与"+s2+"的比较结果为:"+ s1.equals(s2));
        System.out.println(s3+"与"+s4+"的比较结果为:"+ s3.equalsIgnoreCase(s4));
    }


}

 运行结果:

 注意点:

        我们录入的字母即使与我们直接赋值的字符串结果一致,那也不相等,无法利用==号进行判断。

import java.util.Scanner;

public class test08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字");
        String s1=sc.next();
        
        String s2="abc";
        System.out.println(s1==s2);
    }
}

运行结果:

 这个问题,我们要到java的源码中去寻找答案,我们点击查看next的源码:
这里的底层跳的很深,不断地在深挖函数,因此不建议大家一个人摸索阅读:

在我们连跳七八次之后,就可以看到我们想要的:

 我们可以发现:原来录入键盘数据是用到了 new 关键字,也就是说这个是引用数据类型,那自然无法和我们直接赋值得到的“abc”进行正常比较了。

总结:

        以后如果想对字符串进行比较,那么就不可以直接使用“==”,而是要用JAVA提供给我们的函数。这样才可以得到我们需要的答案。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

js:使用vue-codemirror实现一个语法高亮的网页代码编辑器

codemirror code editor component for vuejs 译文:vuejs的codemirror代码编辑器组件 文档 https://github.com/surmon-china/vue-codemirror 安装 # 依赖 pnpm install codemirror vue-codemirror --save# 语言 pnpm install codemirror/lang-json --save pnpm …

【VulnHub系列】MyFileServer

因为是从PDF转换过来偶尔可能会出现内容缺少,可以看原版PDF:有道云笔记 实验环境 Kali:192.168.10.102 MyFileServer:192.168.10.106 实验过程 通过arp-scan来发现靶机的IP地址 sudo arp-scan --interface eth0 192.168.10.1…

mediapipe 谷歌高效ML框架-图像识别、人脸检测、关键点检测

参考: https://github.com/google/mediapipe https://developers.google.com/mediapipe/solutions/guide 框架也支持cv、nlp、audio等项目,速度很快: 1、图形识别 参考:https://developers.google.com/mediapipe/solutions/vi…

【从零开始学习JAVA | 第九篇】字符串综合练习

前言: 在前一篇我们学习了String类以及两个接口函数,今天我们将利用昨天的知识以及讲解新的方法进行几个实战操作,以此来巩固我们的所学内容。 1.实现用户登录,对用户输入的密码进行验证 需求:已知正确的用户名和密码…

31 linux 中 用户栈帧 -> 内核栈帧

前言 比如 我们之前调试的 glibc 相关的库函数 glibc 相关是属于用户程序, 调用 操作系统的系统调用的时候, 会是 怎么样的一个情况呢? 系统调用 会有对应的系统栈帧来处理 系统调用的相关函数调用的堆栈支持 测试用例 我们这里主要是以 printf 中会分配缓冲区调用 ma…

NVIDIA Thrust教程

NVIDIA Thrust教程 Thrust 的 API 参考指南,CUDA C 模板库。 1.简介 Thrust 是基于标准模板库 (STL) 的 CUDA 的 C 模板库。 Thrust 允许您通过与 CUDA C 完全互操作的高级接口,以最少的编程工作实现高性能并行应用程序。 Thrust 提供了丰富的数据并…

windows自带的linux系统,从C盘迁移到D盘

1. 查看当前wsl版本和 运行状态 wsl -l -v wsl --list, -l 用于列出分发 本人电脑装的是Ubuntu-18.04&#xff0c;正在运行&#xff0c;版本1 2. 在D盘建linux目录&#xff0c;打包Ubuntu-18.04&#xff0c;导入到D盘的linux目录 wsl --export <DistributionName> &l…

9个最实用的PS插件盘点!

因为个人原因&#xff0c;对PS的插件用了不下 100 款&#xff0c;其中有好有坏&#xff0c;有优有劣&#xff0c;大浪淘沙&#xff0c;优胜劣汰&#xff0c;现在整理了自己觉得不错的 PS 插件。 1、Alien Skin Blow Up 3 for mac Blow Up 3 mac 版是 Macos 上一款 PS 图像无损放…

Apache Zeppelin系列教程第十篇——SQL Debug In Zeppelin

SQL Debug介绍 首先介绍下什么是SQL Debug&#xff1f; 但是经常有这样一个需求&#xff0c;一大段sql 跑出来之后&#xff0c;发现不是自己想要的结果&#xff1f;比如&#xff1a; demo 1: select id,name from ( select id,name from table1 union all select id,name fr…

web漏洞之文件上传漏洞

文章目录 一、漏洞原因二、漏洞危害三、漏洞利用1.三个条件2.利用方式3.绕过方式a.绕过JS验证① BP绕过② F12绕过③ 菜刀上传实操 b.绕过MIME-Type验证c.绕过黑名单验证① 直接修改后缀名绕过② htaccess绕过(有拦截)③ 大小写绕过(有拦截)④ 空格绕过⑤ .号绕过⑥ 特…

技术改变生活,开发者必须掌握这些技能

技术改变生活&#xff0c;开发者必须掌握这些技能 一、前言二、背景三、开发者必须掌握这些技能1. 语言与编程2. 数据结构与算法3. 开发框架与工具4. 应用开发与测试5. 团队协作与沟通 一、前言 随着科技的不断进步和发展&#xff0c;我们的生活方式也在不断地变化。互联网、智…

Session覆盖测试-业务安全测试实操(19)

弱Token设计缺陷测试,Session覆盖测试 Session覆盖测试 测试原理和方法 找回密码逻辑漏洞测试中也会遇到参数不可控的情况,比如要修改的用户名或者绑定的手机号无法在提交参数时修改,服务端通过读取当前session会话来判断要修改密码的账号,这种情况下能否对Session中的内容做…

【架构】洋葱架构

文章目录 前言一、为什么要用洋葱架构&#xff1f;二、原则2.1、依赖性2.2、数据封装2.3、关注点的分离2.4、耦合性 三、洋葱架构层四、领域模型/实体五、领域服务六、应用服务七、基础设施服务八、可观察性服务九、测试策略十、微服务十一、模块化与打包十二、框架、客户端和驱…

基于Java个人博客网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

基于Java游戏攻略网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

【Unityc#专题篇】之c#进阶篇

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

【C#进阶】C# 索引器

序号系列文章13【C#进阶】C# 特性14【C#进阶】C# 反射15【C#进阶】C# 属性 文章目录 前言1、索引器的概念2、索引器的定义3、索引器的基本使用4、索引器的重载5、接口中的索引器6、属性和索引器之间的比较7、索引器的适用场景结语 前言 &#x1f342; Hello大家好啊&#xff0c…

基于Java会员管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

从零开始 Spring Boot 46:@Lookup

从零开始 Spring Boot 46&#xff1a;Lookup 图源&#xff1a;简书 (jianshu.com) 在前文中&#xff0c;我介绍了 Spring Bean 的作用域&#xff08;Scope&#xff09;&#xff0c;且讨论了将一个短生命周期的 bean &#xff08;比如request作用域的 bean&#xff09;注入到长…

事务小总结

事务定义 是一个数据库操作序列&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割的工作&#xff08;程序执行&#xff09;单元。事务由事务开始与事务结束之间执行的全部数据库操作组成。 事务特性 原子性(Atomicity)一致性(Consistency)隔离性(…