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

【JAVA基础】String类概述

📃个人主页:个人主页

🔥系列专栏:JAVASE基础

💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习

目录

前言:

1.String类概述

2.创建字符串对象的2种方式

3.String常见面试题

4.String类常用API-字符串内容比较


前言:

API (Application Programming Interface,应用程序编程接口)
  • Java写好的技术(功能代码),咱们可以直接调用。
  • Oracle 也为Java提供的这些功能代码提供了相应的 API文档(技术使用说明书)

下载API文档:

API文档

String简单介绍
  • String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

关于 String 类同学们需要学会什么

1.String类概述

String 概述
  • java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
  • Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
String name = "滴滴";
String schoolName = "滴滴答答";

String类的特点详解
  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
    public static void main(String[] args) {
        String name = "热爱";
        name += "编程的";
        name +="小白白";
        System.out.println(name);
    }

 从上述代码可以看出字符串变量name指向的字符串对象,那为何还说字符串不可变呢?

字符串对象存在哪里?
以“”方式给出的字符串对象,在字符串常量池中存储。
String是不可变字符串的原因?
  • String变量每次的修改其实都是产生并指向了新的字符串对象。
  • 原来的字符串对象都是没有改变的,所以称不可变字符串。

2.创建字符串对象的2种方式

方式一:直接使用“”定义。(推荐方式)

String name = "热爱编程的小白白";
方式二:通过String类的构造器创建对象。
构造器说明
public String()创建一个空白字符串对象,不含有任何内容
public String(String original)根据传入的字符串内容,来创建字符串对象
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(byte[] chs)根据字节数组的内容,来创建字符串对象
有什么区别吗?(面试常考)
  • 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
  • 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
char[] chs = {'a', 'b', 'c'};
String s3 = new String(chs);
String s4 = new String(chs);
System.out.println(s3 == s4); // false

 通过“”定义字符串内存原理

 通过new构造器得到字符串对象

字符串对象的特点有哪些?
  • 双引号创建的字符串对象,在字符串常量池中存储同一个。
  • 通过new 构造器创建的字符串对象,在堆内存中分开存储。

3.String常见面试题

 代码如下(大家可以运行测试一下):

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

  代码如下(大家可以运行测试一下):

   public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "ab";
            String s3 = s2 + "c";
            System.out.println(s1 == s3);
        } 
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);
}

4.String类常用API-字符串内容比较

字符串的内容比较

  public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName == loginName);
    }

 

 

结论:字符串的内容比较不适合用==比较。

字符串的内容比较
推荐使用String类提供的“equals”比较:只关心内容一样即可
方法名说明
public boolean equals (Object anObject)将此字符串与指定对象进行比较。只关心字符内容是否一致!
public boolean equalsIgnoreCase (String anotherString)将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致!

equals

 public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName.equals(loginName));
    }

 

equalsIgnoreCase
    public static void main(String[] args) {
                String sysLoginName = "itheima";
                Scanner sc = new Scanner(System.in);
                System.out.println("请您输入您的登录名称");
                        String loginName = sc.next();
                System.out.println(sysLoginName.equalsIgnoreCase(loginName));
    }

因为,equalsIgnoreCase忽略大小写比较字符串。所以我把其中的字母改成大写,两字符比较仍然得到true

 

相关文章:

  • 发布https网页?用cpolar轻松做到
  • 带你搭一下你的第一个SpringBoot项目
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(项目演示、涉及知识点、源码分享)
  • Elasticsearch - Elasticsearch集群Cluster(三)
  • 【云原生 · Kubernetes】部署 kube-proxy 组件
  • 腾讯99公益日-券券松鼠❤
  • Vue动态路由配置
  • 基于小波变换的EMG信号病人数据matlab仿真分析
  • 接口的详解
  • 52.【Java 数据结构——线性表】
  • 离子液体[C7MIm]TfS 1-庚基-3-甲基咪唑三氟甲磺酸盐 齐岳bio
  • 人脸识别9-FastDeploy人脸检测、识别、部署
  • 【Unity】Unity常用类:向量Vector3、四元数Quaternion
  • 《MongoDB入门教程》第12篇 查询结果排序
  • 最新版SpringBoot整合Mybatis,实现增删改查(CRUD)
  • .pyc 想到的一些问题
  • 03Go 类型总结
  • C学习-枚举(九)
  • javascript 哈希表
  • Java超时控制的实现
  • Linux gpio口使用方法
  • SegmentFault 2015 Top Rank
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 聊聊flink的TableFactory
  • 浏览器缓存机制分析
  • 手机端车牌号码键盘的vue组件
  • 【云吞铺子】性能抖动剖析(二)
  • 如何正确理解,内页权重高于首页?
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (pojstep1.3.1)1017(构造法模拟)
  • (笔试题)分解质因式
  • (七)理解angular中的module和injector,即依赖注入
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)memcache、redis缓存
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET命名规范和开发约定
  • .net与java建立WebService再互相调用
  • .sh 的运行
  • .stream().map与.stream().flatMap的使用
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @RequestMapping用法详解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [145] 二叉树的后序遍历 js
  • [CISCN2019 华东南赛区]Web11
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [ffmpeg] 定制滤波器
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [iOS]中字体样式设置 API
  • [Java][Android][Process] ProcessBuilder与Runtime差别
  • [math]判断线段是否相交及夹角
  • [Oracle]4--查询操作