2024年Java最全String Class - 字符串类型 - 上半部分讲解 - Java - 细节狂魔,高级java开发工程师面试题

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 注意问题:

  • 创建字符串

    • 第一种:直接赋值

    • 第二种: 调用构造方法进行构造对象(就是去new‘一个)

    • 第三种:

  • 了解字符串类型

    • 根据上图,我们发现对于字符串来说,有两个属性,一个是char 类型的 value数组(此时这个数组,只是一个变量【引用类型】,没有给这个数组,分配内存。也没有new)。一个是 哈希码。

    • 注意事项

      • 例题一

        • 效果图

          • 附图
    • 例题2: 将例题1中的 str,重新赋值会不会影响 str2的输出结果?

  • 在上面两个例题中,我们需要搞懂:字符串常量是不能被改变的

    • 下面,我们来更深层次的分析一下为什么字符串不能被修改

      • 实例1

        • 附图

          • 结论:
      • 实例2

        • 效果图

        • 附图

      • 实例3

        • 效果图

        • 附图

      • 实例4

        • 效果图

        • 附图

      • 实例5

        • 效果图
      • 实例6

        • 效果图(很明显答案是false,一个完整,一个拼接。两者肯定不同)

        • 附图(底层分析)

      • 实例7

      • 实例7(特别版)

        • 效果图

        • 附图

      • 字符串比较

        • equals
    • 拓展

    • 在Java中,new String类型数据的时候,是不会存在内存重叠的情况,在Java中,字符串是一个对象,而我们new String 对象时,是产生一个新的对象,如果产生的对象是一样的,那还叫新对象??

    • String 类型的数据不可变

    • 数组的整体赋值 ,在Java中,只有一次机会,就是在定义数组的时候。

      • 例子1

      • 例子2

      • 例子3

    • 特殊引用

    • 字符串拼接

      • 附图
    • 特殊:String 类型的数据,可以通过反射修改

前言

=================================================================

字符串:

在C语言里面 是 没有字符串类型的!

但是,在 Java 和 C++ 里,有字符串类型【String】


什么是字符串?什么是字符?

============================================================================

使用双引号,且双引号中包含任意数量的字符【“abcdef”,“a”】,就是字符串。

使用单引号,且单引号中,只包含一个字符【‘a’,‘强’】,就是字符。


注意问题:

====================================================================

1. 在Java当中,没有所谓的字符串以 ‘\0’ 结尾。

2. String 类 ,不能继承。

在这里插入图片描述


创建字符串

====================================================================

创建方法与创建数组,几乎一样。


第一种:直接赋值


在这里插入图片描述


第二种: 调用构造方法进行构造对象(就是去new‘一个)


在这里插入图片描述


第三种:



public class Test {

    public static void main(String[] args) {

        char[] chars = {'a','b','c'};

        String str3 = new String(chars);

        System.out.println(str3);



    }

}



在这里插入图片描述


了解字符串类型

======================================================================

按住Ctrl,点击String,进入String

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


根据上图,我们发现对于字符串来说,有两个属性,一个是char 类型的 value数组(此时这个数组,只是一个变量【引用类型】,没有给这个数组,分配内存。也没有new)。一个是 哈希码。


在这里插入图片描述

这里先给大家打个底,后面,我会详细讲解.。

我们先来搞懂String的对象(通过创建字符串的第三种方法)

String 常用的构造方法就是数组

在这里插入图片描述


注意事项


“hello” 这样的字符串字面值常量, 类型也是 String.

String 也是引用类型. String str = “Hello”; 这样的代码内存布局如下

在这里插入图片描述

^**

例题一


public class Test {

    public static void main(String[] args) {

        String str = "abcef";

        String str2 = str;

        System.out.println(str);

        System.out.println(str2);

    }

}



效果图

在这里插入图片描述

附图

在这里插入图片描述


例题2: 将例题1中的 str,重新赋值会不会影响 str2的输出结果?


在这里插入图片描述


在上面两个例题中,我们需要搞懂:字符串常量是不能被改变的

===========================================================================================

例如: String str = “abcd”; 通过引用 str 去将 字符串"abcd" 修改成 “gbcd”.

答案是做不到的,因为被双引号引起来的是字面值常量,常量是不能被修改的。

例题2中,str = “author”; 这句代码是将str重新指向一个新的对象(修改str的指向),而不是将原来的字符串对象修改成author。


下面,我们来更深层次的分析一下为什么字符串不能被修改


实例1


import java.util.Arrays;



public class Test {

    public static void func(String s,char[] array){

        s = "author";

        array[0] = 'p';

    }

    public static void main(String[] args) {

        String str = "abcd";

        char[] chars = {'y','o','u'};

        func(str,chars);

        System.out.println(str);

        System.out.println(Arrays.toString(chars));

    }

}



附图

在这里插入图片描述

结论:

不是说 转引用 就能改变实参的值。

你要看,到底这个引用干了什么!


实例2


public class Test {

    public static void main(String[] args) {

        String str1 = "hello";

        String str2 = new String("hello");

        System.out.println(str1 == str2);

    }

}



效果图

在这里插入图片描述

附图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


实例3


import java.util.Arrays;



public class Test {

    public static void main(String[] args) {

        String str1 = "hello";

        String str2 = "hello";

        System.out.println(str1==str2);

    }

}



效果图

在这里插入图片描述

附图

在这里插入图片描述


实例4


public class Test {

    public static void main(String[] args) {

        String str1 = "hello";

        String str2 = "he"+"llo";// 注意:此时两个字符串都是常量,且在编译的时候就已经确定了是"hello"

        // 简单来说像这种 直接拿两个字符串常量来拼接的,在编译时,就默认是拼接好了的,或者说 默认就是一个完整的字符串常量

        System.out.println(str1 == str2);

    }

}



效果图

在这里插入图片描述

附图

读者福利

秋招我借这份PDF的复习思路,收获美团,小米,京东等Java岗offer

更多笔记分享

秋招我借这份PDF的复习思路,收获美团,小米,京东等Java岗offer

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

tring str2 = “he”+“llo”;// 注意:此时两个字符串都是常量,且在编译的时候就已经确定了是"hello"

    // 简单来说像这种 直接拿两个字符串常量来拼接的,在编译时,就默认是拼接好了的,或者说 默认就是一个完整的字符串常量

    System.out.println(str1 == str2);

}

}




#### []( )效果图



![在这里插入图片描述](https://img-blog.csdnimg.cn/e4baa96da74c4b7d945ec4d4ae670185.png)



#### []( )附图




# **读者福利**

[外链图片转存中...(img-xrYrG6P6-1714872367941)]

**更多笔记分享**

[外链图片转存中...(img-YFAZrZBB-1714872367941)]



> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值