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

参考链接: 比较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"。 

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

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

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

相关文章

[转载] java如何实现一个字符串的反转和替换

参考链接&#xff1a; 反转Java中的字符串String 一、java字符串的反转 1.利用java字符串的拼接实现字符串的反转&#xff0c;代码如下&#xff1a; public static String reverse(String s){ int lens.length(); String str""; for (int i 0; i < len; i) { …

java 中的instanceof

java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出&#xff0c;这个对象是否是这个特定类或者是它的子类的一个实例。 用法&#xff1a;result object instanceof class参数&#xff1a;Result&#xff1a;布尔类…

[转载] 将一个整数型字符串转换为一个整数

参考链接&#xff1a; Java中整数到字符串转换的不同方法 package com.utl.string; /* * 将一组整数字符串转换为整数 * 例&#xff1a;"234"转换为整数型234 * 分析&#xff1a;涉及到许多问题&#xff0c;例如非法输入&#xff0c;有正负号&#xff0c;是否为空字…

升级PowerShell至4.0版本

为了更好的使用Cmder v1.2&#xff0c;不得不升级PowerShell为4.0。 不知道Cmder的&#xff0c;可以点击这里&#xff1a;https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是运行在Windows机器上实现系统和应用程序管理自动化的命令行脚本环境。 需要.NET环境…

[转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值

参考链接&#xff1a; 从Java中的字符串中删除前导零 字符串太长 pep8 Python f-strings or formatted strings are the new way to format strings. This feature was introduced in Python 3.6 under PEP-498. It’s also called literal string interpolation. Python f字符…

备忘(持续更新。。。)

1、在springmvc这个框架里面&#xff0c;创建新的业务逻辑层&#xff0c;dao、service层至少需要一个接口&#xff0c;项目才能跑起来 2、获取当前用户桌面路径 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

[转载] 字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作

参考链接&#xff1a; 修剪Java中的字符串(删除前导和尾随空格) 字符串操作截取后面的字符串 We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually co…

更改域控制器的计算机名

林功能级别必须为Windows Server 2003及以上 1. netdom computername Server08-1.contoso.com /add:08Server1.contoso.com 2. netdom computername Server08-1.contoso.com /makeprimary:08Server1.contoso.com 3. Restart your computer 4. netdom computername 08Server1.co…

[转载] Google Java代码规范

参考链接&#xff1a; 使用Java计算文本文件txt中的行数/单词数/字符数和段落数 原文地址&#xff1a;https://google.github.io/styleguide/javaguide.html GIthub上GoogleCode风格的配置文件&#xff08;支持Eclipse IDE和IntelliJ IDE&#xff09;&#xff1a;https://git…

SQL PASS西雅图之行——签证篇

本人有幸通过IT168&itpub的站庆活动http://www.itpub.net/thread-1716961-1-1.html&#xff0c;并应微软邀请参加了在西雅图举办的The Conference for SQL Server Professionals&#xff08;简称SQL-PASS&#xff09;。 SQL-PASS会议计划于2012年11月6日-9日举行&#xff0…

[转载] java8 lambda表达式 List转为Map

参考链接&#xff1a; 使用Lambda表达式检查字符串在Java中是否仅包含字母 public static void main(String[] args) { List<User> userList new ArrayList<User>(); User user0 new User("han1", "男1", 20); User user1 new User("…

11.python并发入门(part5 event对象)

一、引入event。 每个线程&#xff0c;都是一个独立运行的个体&#xff0c;并且每个线程的运行状态是无法预测的。 如果一个程序中有很多个线程&#xff0c;程序的其他线程需要判断某个线程的运行状态&#xff0c;来确定自己下一步要执行哪些操作。 threading模块中的event对象…

[转载] Java 将字符串首字母转为大写 - 利用ASCII码偏移

参考链接&#xff1a; 使用ASCII值检查Java中的字符串是否仅包含字母 将字符串name 转化为首字母大写。普遍的做法是用subString()取第一个字母转成大写再与之后的拼接&#xff1a; str str.substring(0, 1).toUpperCase() str.substring(1); 看到一种效率更高的做法&…

俞永福卸任阿里大文娱董事长,改任 eWTP 投资组长

两天前&#xff08;11月13日&#xff09;&#xff0c;阿里文娱董事长俞永福离职的消息&#xff0c;在互联网圈炸了锅。但很快&#xff0c;俞本人就在微博做了澄清&#xff0c;并称“永远幸福&#xff0c;我不会离开”。然而就在今天&#xff08;11月15日&#xff09;&#xff0…

[转载] java提取字符串中的字母数字

参考链接&#xff1a; 使用Regex检查字符串在Java中是否仅包含字母 String str "adsf adS DFASFSADF阿德斯防守对方asdfsadf37《&#xff1f;&#xff1a;&#xff1f;%#&#xffe5;%#&#xffe5;%#$%#$%^><?1234"; str str.replaceAll("[^a-zA-…

snort的详细配置

前一段一直在做snort入侵检测系统的安装以及配置&#xff0c;看了很多的网上资料&#xff0c;也算是总结了下前辈的经验吧。需要的软件包&#xff1a;1、httpd-2.2.6.tar.gz2、mysql-5.1.22-rc-linux-i686-icc-glibc23.tar.gz3、php-5.2.4.tar.bz24、acid-0.9.6b23.tar.gz5、ad…

[转载] Java:获取数组中的子数组的多种方法

参考链接&#xff1a; Java中的数组Array 我的个人博客&#xff1a;zhang0peter的个人博客 Java&#xff1a;从一个数组中创建子数组 使用Arrays.copyOfRange函数 Arrays.copyOfRange支持&#xff1a;boolean[]&#xff0c; byte[] &#xff0c;char[]&#xff0c;double…

[转载] Java中Array(数组)转List(集合类)的几种方法

参考链接&#xff1a; Java中的数组类Array 1、循环。新建List类&#xff0c;循环填充。 2、利用Arrays类的静态方法asList()。 Arrays.asList(T[])返回Arrays类的一个内部内List(T)&#xff0c;此类继承自AbstractList&#xff0c;不可增删。若想要一个可以增删的List类&am…

Linux查看系统cpu个数、核心书、线程数

Linux查看系统cpu个数、核心书、线程数 现在cpu核心数、线程数越来越高&#xff0c;本文将带你了解如何确定一台服务器有多少个cpu、每个cpu有几个核心、每个核心有几个线程。 查看物理cpu个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看核…

[转载] java中数组的反射的探究

参考链接&#xff1a; Java中的反射数组类reflect.Array 数组的反射有什么用呢&#xff1f;何时需要使用数组的反射呢&#xff1f;先来看下下面的代码&#xff1a; Integer[] nums {1, 2, 3, 4}; Object[] objs nums; //这里能自动的将Integer[]转成Object[] Object obj n…