参考链接: 比较Java中的两个字符串String

最近很多学习java的小白问我字串相关的问题,觉得很有必要整理下,以方便初学者理解字符串以及应对今后面试中考官的提问。

如果你是有几年Java开发经验,可以根据目录选择性的阅读以下内容,并欢迎留言补充。

问题列表如下:

0.String是最基本的数据类型吗? 1.String是否可以被继承? 2.Java中的String a = "abc"和String a = new String("abc")的区别? 3.为什么字符串是不可变的? 4.什么是String常量池? 5.使用字符串初始化代码:String a = new String("abc");创建多少个对象? 6.String类中intern()的作用? 7.使用equals()和'=='进行字符串比较的差异? 8.String StringBuffer StringBuilder 三者各自线程安全性如何? 9.String,StringBuffer以及StringBuilder之间的区别? 10.如何连接多个字符串。 11.如何分割一个String? 12.如何判断两个String是否相等? 13.String类中,字符串长度是否有限制? 14.Java String “+”连接符拼接字符串原理?

0.String是最基本的数据类型吗? Java中基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个;String是定义在 java.lang 包下的一个类。它不是基本数据类型。

1.String是否可以被继承? 不可以,因为String类似final类。

2.Java中的String a = "abc"和String a = new String("abc")的区别? String a = "abc" 使用常量进行初始化,初始化后内存存储在String常量池中 String a = new String("abc") 创建字符串对象,JVM创建字符串对象但不存储于字符串池。

3.为什么字符串是不可变的? 因为String类似final类。

4.什么是String常量池? 字符串池是一个特殊的内存区域,与存储这些字符串常量的常规堆内存分开。这些对象在应用程序的生命周期中被称为字符串变量。 如:双引号直接创建的字串,String a = "abc",会将"abc"存储在该区域。

5.使用字符串初始化代码:String a = new String("abc");创建多少个对象? 上面一行代码将会创建1或2个字符串。如果在字符串常量池中已经有一个字符串“abc”,那么就只会创建一个“abc”字符串。如果字符串常量池中没有“abc”,那么首先会在字符串池中创建,然后才在堆内存中创建,这种情况就会创建2个对象了。

6.String类中intern()的作用?

作用:返回字符串对象的规范表示。 调用该方法时,如果池已包含String与equals(Object)方法确定的此对象相等的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并String返回对此对象的引用。 它遵循对于任何两个字符串s和t,s.intern()==t.intern()是true当且仅当s.equals(t)是true。意味着如果s和t都是不同的字符串对象并且具有相同的字符序列,则在两者上调用intern()将导致由两个变量引用的单个字符串池文字。

典型考题:

String s1 = new String("ab") + new String("c");

s1.intern();因为此时常量池没有"abc",会将s3指向常量"abc"

String s2 = "abc";

System.out.println(s1 == s2);//true

String s3 = new String("de") + new String("f");

String s4 = "def";

s3.intern();// 因为此时常量池有"def",不会将s3指向常量"def"

System.out.println(s3 == s4);// false

String s5 = "ghi";

String s6 = new String("ghi");

s6.intern();// 因为此时常量池有"ghi",不会将s6指向常量"ghi"

System.out.println(s5 == s6);//false

7.使用equals和'=='进行字符串比较的差异? 字串中equals是重写的一个方法,比较字符串中value字符数组中字符是否一致,即比较的是字符串的值,==不仅比较字符串的值,而且还比较两个字符串所在内存地址是否相同。

8.String StringBuffer StringBuilder 三者各自线程安全性如何? String  StringBuffer线程安全,StringBuilder非线程安全。

9.String,StringBuffer以及StringBuilder之间的区别? String是值不可变类,每次在String对象上的操作都会生成一个新的对象;StringBuffer和StringBuilder则允许在原来对象上进行操作,而不用每次增加对象;StringBuffer是线程安全的,但效率较低,而StringBuilder效率最高,但非线程安全。

10.如何连接多个字符串。 String:通过解读Java API,可以知道Java为字符串连接运算提供特殊支持。 字符串连接是通过StringBuilder (或StringBuffer )类及其append方法实现的。 StringBuffer:使用append实现 StringBuilder:使用append实现。

11.如何分割一个String? 可以使用字串分隔函数:public String[] split(String regex),根据传入的正则字符串进行分割,注意,如果最后一位刚好有传入的字符,返回数组最后一位不会有空字符串。

12.如何判断两个String是否相等? 有两种方式判断字符串是否相等,使用"=="或者使用equals方法。当使用"=="操作符时,不仅比较字符串的值,还会比较引用的内存地址。大多数情况下,我们只需要判断值是否相等,此时用equals方法比较即可。 还有一个equalsIgnoreCase可以用来忽略大小写进行字符串值比较。

13.String类中,字符串长度是否有限制? 可以看字符串类的源码,字符串使用char数组存放字符,该字符数组为定义最大长度,故,理论上来说String是没有长度限制的,限制的是你的内存有多大。

14.Java String “+”连接符拼接字符串原理? String字符串拼接通过StringBuilder走中间过程,通过append方法实现。

程序有大量字符串拼接时,建议直接StringBuilder实现,就不需要底层new很多临时String对象了。注意null参与拼接时会变成字符串"null"。

相关问题持续更新汇总,逐步添加代码及更详细的原理解析。

[转载] 必须要会回答的Java面试题(字符串篇)相关推荐

  1. Java面试题-进阶篇(2022.4最新汇总)

    Java面试题-进阶篇 1. 基础篇 1.1 基本数据类型和包装类 1.2 Double转Bigdecimal可能会出现哪些问题?怎么解决? 1.3 equals 与 == 的区别? 1.4 Java ...

  2. Java面试题基础篇(一)

    Java面试题基础篇(一) Java面试题基础篇(一) 1.jre和jdk有什么区别? 2.==与equals的区别? 3.接口和抽象类的共同点和不同点? 4.lamda表达式的优缺点? 5.Stri ...

  3. 挑战10个最难回答的Java面试题,我第2题就跪了...

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 这是 ...

  4. 挑战10个最难回答的Java面试题(附答案)

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:segmentfault.com/a/1190000019962661 这是我收集的10 ...

  5. 阿里内部资料!10W字总结JAVA面试题-基础篇

    目录 1.JAVA语言有哪些特点 2.面向对象和面向过程的区别 3 .八种基本数据类型的大小,以及他们的封装类 4.标识符的命名规则. 5.instanceof 关键字的作用 6.Java自动装箱与拆 ...

  6. 年终盘点 | 2019年Java面试题汇总篇(附答案)

    作者 | 老王 来源 | Java中文社群「微信公众号」 在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几 ...

  7. 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案

    在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源 ...

  8. Java面试题——基础篇一

    目录 什么是Java? JVM.JRE和JDK的关系 Java语言有哪些特点? &和&&的区别 final 在 java 中有什么作用? String 属于基础的数据类型吗? ...

  9. Java面试题十篇基本问题,学完这些我就不信拿不到offer

    前言 网上找了很多的Java面试题及部分资料,选取了其中10篇来作为本次的分享.以下为整理出来的文章,给大家分享. java面试题及答案 第一篇 一面 手写ArrayList 手写进制转换算法,求出一 ...

最新文章

  1. suse卸载自带java_在openSUSE 13.1下安装卸载openjdk以及Oracle JDK
  2. Spring data redis应用示例
  3. react项目中使用mocha结合chai断言库进行单元测试
  4. 教你轻松恢复Linux口令
  5. 在项目中使用JMail发送邮件
  6. 小程序中封装的ajax 方法
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院在线预约挂号系统
  8. CommandLineToArgvW
  9. 武汉CMMI3-CMMI5三年到期后复审指南
  10. 机房报表错误-没有分配到需要的内存
  11. Socket和TcpClient
  12. 一个好玩的辞职信HTML版
  13. 基于kintex UltraScale XCKU040的双路QSFP+光纤PCIe卡383 光纤PCIe卡
  14. troubleshooting之解决YARN队列资源不足导致的application直接失败
  15. Centos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tarCentos7安装mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
  16. vmware NAT模式网络连接无法上网
  17. 对话李志飞:出门问问最早将于2019年底考虑上市
  18. Python的DataFrame中筛选满足某列的值在指定数值内的行
  19. android图文并排仿朋友圈,Android之仿微信发朋友圈图片选择功能
  20. 比较流行的几种区块链共识算法

热门文章

  1. 奥鹏东师计算机应用基础18,免费在线作业答案奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1)...
  2. CTFHUB 《请求方式》 http请求,curl命令总结
  3. 计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生
  4. linux 查看path文件,linux入门之环境变量与文件查找
  5. NameError: name 'long' is not defined
  6. 常用系统函数oracle
  7. Kafka:集群部署
  8. 【二维差分】Monitor
  9. HashiCorp Vault 1.0开源自动解封特性,新增Batch令牌
  10. 2018百度之星程序设计大赛 - 资格赛 1002 子串查询