设为首页 加入收藏

TOP

Java String 面试题以及答案
2017-12-14 14:32:00 】 浏览:288
Tags:Java String 试题 以及 答案

String是最常使用的Java类之一,整理的了一些重要的String知识分享给大家。


作为一个Java新手程序员,对String进行更深入的了解很有必要。如果你是有几年Java开发经验,可以根据目录选择性的阅读以下内容。


String是定义在 java.lang 包下的一个类。它不是基本数据类型。
String是不可变的,JVM使用字符串池来存储所有的字符串对象。


回文就是正反都一样的词,如果需要判断是否是回文,只需要比较正反是否相等即可。String类并没有提供反转方法供我们使用,但StringBuffer和StringBuilder有reverse方法。


假设面试官让你不使用任何其他类来实现的话,我们只需要首尾一一对比就知道是不是回文了。


使用toUpperCase 和 toLowerCase 方法让一个字符串变为 大写或小写。


String内部实现了Comparable接口,有两个比较方法:compareTo(String anotherString) 和compareToIgnoreCase(String str)。


这是一个误导题,String是一系列字符,所有我们没法转换成一个单一的char,但可以调用toCharArray() 方法将字符串转成字符数组。


使用String的getBytes()方法将String转成byte数组,使用String的构造方法 new String(byte[] arr) 将byte数据转为String。


<div id="question8"></div>


String是不可变类,每当我们对String进行操作的时候,总是会创建新的字符串。操作String很耗资源,所以Java提供了两个工具类来操作String - StringBuffer和StringBuilder。


StringBuffer和StringBuilder是可变类,StringBuffer是线程安全的,StringBuilder则不是线程安全的。所以在多线程对同一个字符串操作的时候,我们应该选择用StringBuffer。由于不需要处理多线程的情况,StringBuilder的效率比StringBuffer高。


String是不可变类有以下几个优点


实际上第一个方法调用了第二个方法,只不过不限制返回的数组长度了。


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


顾名思义,字符串常量池就是用来存储字符串的。它存在于Java 堆内存。


下图解释了字符串池在java堆空间如何存在以及当我们使用不同方式创建字符串时的情况。


以下是上图的一个编程例子


运行以上代码,输出如下:


一些java题中,可能会问一段代码中有几个字符串被创建,例如:


上面一行代码将会创建1或2个字符串。如果在字符串常量池中已经有一个字符串“Cat”,那么就智慧创建一个“Cat”字符串。如果字符串常量池中没有“Cat”,那么首先会在字符串池中创建,然后才在堆内存中创建,这种情况就会创建2个对象了。


当intern()方法被调用,如果字符串池中含有一个字符串和当前调用方法的字符串eqauls相等,那么就会返回池中的字符串。如果池中没有的话,则首先将当前字符串加入到池中,然后返回引用。


String是不可变类,一旦创建了String对象,我们就无法改变它的值。因此,它是线程安全的,可以安全地用于多线程环境中。


因为字符串是不可变的,当创建字符串时,它的它的hashcode被缓存下来,不需要再次计算。因为HashMap内部实现是通过key的hashcode来确定value的存储位置,所以相比于其他对象更快。这也是为什么我们平时都使用String作为HashMap对象。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Data 整合 ElasticSearch.. 下一篇简单的Spring Web工程跳转且传参D..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目