Java中关于String类以及字符串拼接的问题

这篇具有很好参考价值的文章主要介绍了Java中关于String类以及字符串拼接的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面试题

  • String为什么不可变?
答案
/*
1.Java中String类维护一个final修饰的char[]数组实现不可变,意味着一旦分配了内存空间,它们就不能被修改。
2.我们所说的不可变指的是字符串池中的对象是不可更改的(这样方便JVM的内存管理) 但当前变量可以修改指向
eg1.当我们创建String实例的时候 字符串中存在-->返回引用,而不是开辟新的对象空间 不存在-->字符串中开辟对象空间并返回引用
eg2.当我们使用String中的方法来对其进行操作时,例如使用 replace() 方法修改字符串内容时,实际上是创建了一个新的字符串对象,并将其返回。
  原始的字符串本身并没有被修改,只是改变了指向该字符串的引用。这种设计保证了在多线程环境下,String对象不会被修改,从而提高了代码的可靠性和安全性。
*/
  • String s1=new String("abc");创建了几个字符串对象
答案
/*
创建一个字符串对象
在Java中,使用 String s = "abc" 方式创建的字符串常量在编译期就已经被确定并放入常量池中,
因此,如果使用 String s = "abc" 创建多个字符串对象时,实际上只有一个对象会被创建。
而使用 String s = new String("abc") 方式创建的字符串对象则是在运行时创建的,每次都会在堆中创建一个新的对象,
因此在本例中,该语句创建了一个在堆中的字符串对象
*/

String类部分源码

//被final修饰不可被继承
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    //String维护char[] 所以不可修改
    private final char value[];

创建String对象的方式

Java中关于String类以及字符串拼接的问题

  • str1它首先会去方法区的常量池中找,有“hello”这个对象就直接引用,没有就创建一个新的对象“hello”,存放在常量池中。
  • 而new的方式首先会在堆中创建一个对象,然后再去常量池中找,有直接引用,没有就创建一个新的对象“hello”。

两者区别

  • 直接赋值创建0或1个对象,而new的方式创建1或2个对象。
  • 为了提升Java虚拟机的性能和减少内存的开销,避免字符串的重复创建,尽量少使用new的方式创建String对象

代码分析

public static void main(String[] args) {
        String str1 = "hello";//指向常量池中的引用
        String str2 = new String("hello");//指向堆中的引用
        String str3 = str2;//str3==str2 true
        String str4 = "hello";//str1==str4 true
    }

intern()

字符串调用intern()会返回常量池中这个字符串引用,可作为锁对象

字符串拼接

String a="A";
String b="B";
String c=new String("C");
a="A"+b;//变量拼接 指向变为堆中地址
a="A"+c;//变量拼接 指向变为堆中地址!
a="A"+"A";//常量拼接依旧指向常量池中的地址 a=="AA" true
final String d="D";//这是常量
a="A"+d//a=="AD" true

+号变量拼接底层原理 StringBuidlerd构造初始化容量为16的char[] 然后调用append()进行拼接 最后将结果new String()的形式赋给左边变量文章来源地址https://www.toymoban.com/news/detail-426027.html

到了这里,关于Java中关于String类以及字符串拼接的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java拼接list字符串

    使用Stream方法将列表转换为一个流。在流中,使用Collectors.joining方法将所有元素连接成一个字符串。这个方法可以接受一个字符串参数,该参数用作分隔符。 在调用钉钉的一个消息发送API时遇到了一个这样的问题,当时我是这么写的总觉得没问题,但是一直报错,说我userI

    2024年02月16日
    浏览(48)
  • Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式

    1、String.format 最原始最基础的方式。 使用%来表示占位,后面跟上不同的标识符,用于限定这个占位符的参数类型,由jdk原生提供支持。 示例: 2、MessageFormat 如果遇到一个参数需要替换模板中多个占位的场景,更友好的方式是MessageFormat,由jdk原生提供支持。 示例: 举例:将

    2024年02月16日
    浏览(57)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(55)
  • Java中的String字符串练习

    目录 Java中的String字符串练习 01-用户登录 02-遍历字符串并统计字符个数 03-字符串拼接 04-字符串反转 注意点 05-金额转化(简单) 代码解释: 06-手机号屏蔽 07-身份证号码查看 易错点: 08-敏感词替换 注意点 toCharArray() 是Java中的一个方法,它用于将字符串转换为字符数组。 方法签

    2024年03月28日
    浏览(62)
  • Java的String(字符串详解)

    主要有三种,一种是直接使用常量去构造,要么使用new String来构造,或者还可以使用字符数组的形式。 String 类型本身并不存储数据,而是存储指向该字符串的引用,所以字符串类型是一个类,s1是一个引用,指向这个类。而这个类有两个成员变量,一个名称为value,这也是一

    2024年02月07日
    浏览(60)
  • Java中的字符串String

    目录 一、常用方法 1、字符串构造 2、String对象的比较 (1)、equals方法 (2)、compareTo方法 (3)、compareToIgnoreCase方法(忽略大小写进行比较) 3、字符串查找 4、转化 (1)数值和字符串转化 ​编辑 (2)大小写转换 (3)字符串转数组 (4)格式化 5、字符串替换 6、字符串

    2024年02月05日
    浏览(62)
  • 华为OD机试 - 字符串拼接(Java & JS & Python & C)

    题目描述 给定 M(0 M ≤ 30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为 N(0 N ≤ 5)的字符串, 要求相同的字符不能相邻,计算出给定的字符列表能拼接出多少种满足条件的字符串, 输入非法或者无法拼接出满足条件的字符串则返回0。 输入描

    2024年01月22日
    浏览(68)
  • [正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。

    🌈键盘敲烂,年薪30万🌈 目录 一、字符串 1.字符串在内存中的存储方式 2.创建字符串对象的两种方式 3.两种创建方式的区别 4.字符串对象一旦创建不可改变 - 为什么??? 5.字符串的拼接 6.字符串的拼接原理 二、键盘录入 三、总结 🔥在java中,内存中有两个地方可以存储

    2024年02月08日
    浏览(75)
  • Java截取String字符串的方法

    1.指定字符截取字符串,返回字符串数组 2.指定索引,截取字符串 3.通过StringUtils类截取字符串

    2024年04月22日
    浏览(41)
  • Java中常见字符串拼接九种方式,总有一款你喜欢!

    在 Java 编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接 SQL 语句、构建 HTTP 请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问题。 下面我们就来列举出来几种方式,

    2024年02月16日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包