1、什么是String,它是什么数据类型?
答:String是定义在java.lang包下的一个类,它不是基本数据类型。
String是不可变的,JWM使用字符串池来储存所有的字符串对象。
2、创建String对象的不同方式有哪些?
答:两种方式。
一种是通过new很关键字来创建。使用这种方式时,JWM创建字符串对象但不存储在字符串池中,我们可以调用intern()方法将该字符串对象存储在字符串池中,如果该字符串池已经有了同样值得字符串,则返回引用。
另一种是使用双引号来直接创建。使用这种方式时。JVM去字符串找有么有相同值得字符串,如果有,则返回找到的字符串引用。否则创建一个新的字符串对象,并·存储在字符串池中。
例如:

String str=new String("abc");
String str1="abc";

3、写一个方法来判断一个String是否是回文(顺读和倒读都一样的词)?
答:String类中并没有提供翻转方法供我们使用,但StringBuffer和StringBuilder有reverse方法。

private static boolen isPalindrome(String str){if(str==null){return false;}StringBuilder strBuilder=new StringBuilder(str);srtBuilder.reverse();return strBuilder.toString().equals(str);
}

不使用reverse方法实现

private static boolean isPalindromeString(String str){if(str==null)return null;int length=str.length();System.out.println(length/2);for(int i=0;i<length/2;i++){if(str.charAt(i)!=str.charAt(length-i-1))return false;}return true;
}

4、如何让一个字符串变成小写或大写形式?
答:toUpperCase和toLowerCase方法
5、如何比较两个字符串?
答:String内部实现了Comparable接口,有两个比较方法:compareTo(String anotherString)和compareToIgnoreCase(String str)。
compareTo(String anotherString)与传入的anotherString字符串进行比较,如果小于传入的字符串返回负数,如果大于则返回正数。当两个字符串值想等时,返回0此时equals方法会返回true。
equalsIgnoreCase(String str)该方法与compareTo方法类似,区别只是内部利用了Character.toUpperCase等方法进行了大小转换后进行比较。
6、如何将String转换为char,反过来呢?
答:String是一系列字符,所以我们无法转换成单一的char但是可以调用toCharArray()方法将字符串转换成字符数组。

 String str="Java interview";//string to char array;char[] chars=str.toCharArray();system.out.println(chars.length);

7、如何将String转换为byte array,反过来呢?
答:使用String的getBytes()方法将String转换成byte数组,使用String的构造方法new String(byte[] arr)将byte数据转为String。

public class StringToByteArray{public static void main(String[] args){String str="PANKAJ";byte[] byteArr=str.getBytes();//print the byte[] elementsSystem.out.println("String to byte array:"+Array.toString(byteArr))}public static void main(String[] args){byte[] byteArray={'P','A','N','k','A','J'};byte[] byteArray={80,65,78,75,65,74};String str=new String(byteArray);Srting str1=new String(byteArray1);System.out.println(str);System.out.println(str1);}
}

8、浅谈一下String, StringBuffer,StringBuilder的区别?
答:String是不可变类,每当我们对String进行操作的时候,总会创建新的字符串。操作String和耗费资源,所以java提供了两个工具类来操作String——StringBuffer和StringBuilder。
StringBuilder和StringBuffer是可变类,StringBuffer是线程安全的,StringBuilder则不是线程安全的。所以在多线程对同一字符串进行操作的时候,我们选择StringBuffer。在不需要处理多线程的情况下,StringBuilder的效率比StringBuffer高。
9、String是不可变的有什么好处?
答:由于String是不可变类,所以在多线程中使用是安全的,我们不需要做其他任何同步操作。
String是不可变的,其值也是不可变的,所以用来存储数据密码很安全。
因为java字符串不可变,可以在java运行时节省大量堆空间。因为不同的字符串变量可以引用池中的相同的字符串。如果字符串是可变的话,任何一个变量的值改变,就会映射到其他变量,那么字符串池也就没有什么意义了。
10、如何分割一个String?
答:public String[] split(String regex):
根据传入的正则字符串进行分割,注意,如果最后一位刚好有传入的字符,则返回的数组不会有空字符串。

 String s="abcada"System.out.println(Arrays.toString(s.split("a"));//以上代码输出结果为[,bc,,d].public String[] split(String regex,int limit)://限制分割结果数组中有几个字符串。传入2,则结果分割后数组长度为2。String s="Y,Kunming,Yunnan";String[] data=s.split(",".2);System.out.println("Name=",data[0]);//YSystem.out.println("Address=",data[1]);//Kunming,Yunnan//实际上第一个方法调用了第二个方法,只不过不限制返回的数组长度了public String[] split(String regex){return split(regex,0);}

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

 String s1="abc";String s2="abc"String s3=new String("abc");System.out.println("s1 == s2 ? "+(s1==s2));//trueSystem.out.println("s1 == s3 ? "+(s1==s3));//falseSystem.out.println("s1 equals s3 ? "+s1.equals(s3));//true

12、什么是字符串池?
答:顾名思义,字符串常量池就是用来存储字符串的,它存在于java对内存中。
下图解释了字符串池在java堆空间中如何存在以及当我们使用不用方式创建字符串时情况。

public class StringPool{public static void main(String[] args){String s1="cat";String s2="cat";String s3=new String("cat");System.out.println("s1==s2:",(s1==s2));System.out.println("s1==s3:",(s1==s3))}
}

结果如下:
s1= =s2:true
s1= =s3:false
以上代码会创建1或2个字符串。如果字符串池中已经有一个字符串“cat”,那么就会自动创建一个“cat”字符串。如果字符串常量池中没有“cat”,那么首先会在字符串池中创建,然后才在堆内存中创建,这种情况下就会创建2个对象了。
13、String的intern()方法
答:当intern()方法被调用,如果字符串池中已经有一个字符串和当前调用方法的字符串equals相等,那么就会返回池中的字符串。如果池中没有的话,则首先将当前字符串加入到池中,然后返回引用。
14、String是线程安全的吗?
答:String是不可变量,一旦创建了String对象,我们就无法改变他的值,因此,它的线程是安全的,可以安全的用于多线程环境中。
15、为什么我们在使用HashMap的时候总是用String做key?
答:因为字符串是不可变的,当创建字符串的时候,他的hashcode被缓存下来,不需要再次计算。因为HashMap内部实现是通过key的hashcode来确定value的存储位置,所以相比于其他对象更快。这也就是为什么我们平时使用String作为HashMatp对象。
16、String编程题
1、下面的代码输出什么
String s1 = new String(“abc”);
String s2 = new String(“abc”);
System.out.println(s1 == s2);
输出:false
2、下面的代码输出什么
String s1 = “abc”;
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
输出:false,s2不是String类型,是StringBuffer类,s1用了String的equals方法进行了类型判断
3、下面的代码输出什么
String s1 = “abc”;
String s2 = new String(“abc”);
s2.intern();
System.out.println(s1 ==s2);
输出:false
4、下面的代码将创建几个字符串对象。
String s1 = new String(“Hello”);
String s2 = new String(“Hello”);
答案是 2个对象.

17,说说String/StringBuffer/StringBuilder它们之间的区别?为什么要引入其它两种字符串处理类?
答:目的是提高字符串连接效率。在大部分情况下,字符串拼接速度为:StringBuilder>StringBuffer>String.
String是不可变的,因此每次对其操作改变变量值,其实都是生成一个新的对象,然后将变量引用指向新的对象,因此速度慢。
StringBuffer则不同,对其操作即直接操作对象指向的引用,无需产生新的对象,速度很快;它的线程是安全的,在维护多线程的同步上也会损耗一些性能。
StringBuilder是JDK5之后新增的,其用法与StringBuffer一致,但它的线程是不安全的,在单线程中最佳,因为其不需要维护线程安全,因此也是最快的。
String 字符串常量(线程安全)。StringBuffer 字符串变(线程安全)。StringBuilder 字符串变量(非线程安全)。String是不可变的,StringBuffer/StringBuilder 是可变的;String/StringBuffer是线程安全的,StringBuilder是非线程安全的。
18、这里引入一个新的问题,了解String.intern()方法吗?
String.intern()查找常量池中是否有相同的unicode字符串常量,如果有则返回其引用,如果没有,则在常量池中增加一个unicode等于str的字符串并返回它的引用。因此在用String进行字符串拼接时,会产生很多临时变量。建议多使用StringBuffer/StringBuilder。
19、String/StringBuffer/StringBuilder都分别存放在什么地方?
String是存放在常量池中,在编译期间已经被确定了。new String()不是字符串常量,他有自己的地址空间,放在堆空间,而其他两个都存放在堆空间中。

Java字符串面试题相关推荐

  1. java字符串笔试题_五道Java常见笔试题及答案汇总

    1.String和StringBuffer的区别? 答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数 ...

  2. java 字符串 面试题_Java常用类String的面试题汇总(java面试题)

    1.比较两个字符串时使用"=="还是equals()方法? 当然是equals方法."=="测试的是两个对象的引用是否相同,而equals()比较的是两个字符串 ...

  3. 复习Java类与对象Java字符串面试题生活【记录一个咸鱼大学生三个月的奋进生活】003

    记录一个咸鱼大学生三个月的奋进生活003 复习Java(类与对象) 学习Java面试题 初步规划软件测试课设 健身 照片分享 复习Java(类与对象) 既然要说类与对象那就要明确 面向对象 这个概念: ...

  4. java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...

    面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...

  5. java 字符串 面试_JAVA中String介绍及常见面试题小结

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 深刻认识String 1)String为字符串常量:即String对象一旦 ...

  6. Java经典面试题详解:Java字符串转成list

    阿里巴巴Java岗面试题分享 1.HashMap 的内部结构?内部原理?和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让遍历效率⾼? 2.讲一讲讲讲 ConcurrentHas ...

  7. 史上最全 Java 多线程面试题及答案

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  8. 31 道 Java 核心面试题,统统打包给你!

    作者 | 沉默王二 来源 | 沉默王二 责编 | 王晓曼 二哥,你好,找工作找了仨月,还没有找到,很焦虑,我该怎么办呢?你那有没有 Java 方面的面试题可以分享一波啊? 以上是读者田田给我发的私信, ...

  9. Java面试笔试题大汇总一(最全+详细答案)

    Java面试笔试题大汇总二(最全+详细答案)https://www.jianshu.com/p/f5120f1b75be Java面试笔试题大汇总三(最全+详细答案)https://www.jians ...

最新文章

  1. 机器学习入门(05)— 使用 NumPy 实现 3 层简单神经网络
  2. 上传文件大小的配置Webcong
  3. Java ReentrantLock 详解
  4. java 获取麦克_Java Sound API-捕获麦克风
  5. Linux纯干货知识总结|面试专用
  6. 如何通过httpd和DVD ISO在RHEL上配置yum本地源
  7. 网速dns怎么调快_怎么设置dns?教你快速解决网速慢的问题
  8. 当众讲话第二章当众讲话的基本原则
  9. 转载:GCC 提供的原子操作
  10. c#单纯发送post请求一个URL得到返回值
  11. notepad++ :正则表达式系统教程(zz)
  12. Java Jersey2使用总结
  13. php mysql购物车代码_php购物车实现代码实例汇总
  14. 3A算法—自动对焦(AF)
  15. 球动画设计HTML5,html5 canvas炫彩运动小球动画特效
  16. 剑气纵横-autojs动画
  17. Powerdesigner(16.6) 导出漂亮的word(实用型)
  18. DEM影像下载、拼接、裁剪(ArcGIS)
  19. 安卓-电子签名signature
  20. 【Novel AI】使用绘画AI构建unity游戏资源

热门文章

  1. Python新建Flask项目
  2. 【FPGA】Spartan®-7器件XC7S75-1FGGA484C、XC7S15-1FTGB196C现场可编程门阵列芯片
  3. Flink 理解流式计算中的窗口概念
  4. NoC-based DNN Accelerator: A Future Design Paradigm
  5. 22222222222
  6. oracle dba要学多久,Oracle DBA速成法的潜规则
  7. 项目管理计算:EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI各是什么意思
  8. python和C++
  9. 交友盲盒源码h5开发浅谈
  10. 阿里云产品 系列(一)MaxCompute简介与使用--上