首页 > 编程语言 >Java面试知识点总结(二)

Java面试知识点总结(二)

时间:2022-08-17 14:36:58浏览次数:55  
标签:知识点 Java String StringBuffer xyz 面试 叶痕 StringBuilder 字符串

字符串&集合面试题汇总

一、Java 中操作字符串都有哪些类?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder 。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。

而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String

StringBufferStringBuilder 最大的区别在于StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但StringBuilder 的性能却高于 StringBuffer,

所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。

二、String、StringBuffer和StringBuilder区别(类似上一题)

  1. 数据可变和不可变
  • String 底层使用一个不可变的字符数组private final char value[]; 所以它内容不可变。
  • StringBuffer 和 StringBuilder 都继承了AbstractStringBuilder 底层使用的是可变字符数
  1. 线程安全
  • StringBuilder 是线程不安全的,效率较高;而StringBuffer 是线程安全的,效率较低。通过他们的append() 方法来看,StringBuffer 是有同步锁,而StringBuilder 没有:
点击查看代码
@Override
public synchronized StringBuffer append(Object obj){
	toStringCache = null;
	super.append(String.valueOf(obj));
	return this;
}
@Override
public StringBuilder append(String str){
	super.append(str);
	return this;
}
  1. 相同点
    StringBuilder 与 StringBuffer 有公共父类AbstractStringBuilder 。

最后,操作可变字符串速度: StringBuilder > StringBuffer > String,这个答案就显得不足为奇了。

四、String str="i"与 String str=new String("i")一样吗?

不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而String str=new String("i") 则会被分到堆内存中。
代码示例:

点击查看代码
String x = "叶痕秋"; 
String y = "叶痕秋";
String z = new String(" 叶 痕 秋 ");
System.out.println(x == y); // true
System.out.println(x == z); // false
String x = "叶痕秋" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的元素,比如当执行“叶痕秋”时,java虚拟机会先在常量池中检索是否已经有“叶痕秋”,如果有那么就将“叶痕秋”的地址赋给变量,如果没有就创建一个,然后在赋给变量;

而 String z = new String(“叶痕秋”) 则会被分到堆内存中,即使内容一样还是会创建新的对象。

五、String 类的常用方法都有那些?

  • indexOf(): 返 回 指 定 字 符 的 索 引 。
  • charAt():返 回 指 定 索 引 处 的 字 符 。
  • replace(): 字 符 串 替 换 。
  • trim(): 去 除 字 符 串 两 端 空 白 。
  • split():分割字符串,返回一个分割后的字符串数组。getBytes():返回字符串的
  • byte 类型数组。
  • length(): 返 回 字 符 串 长 度 。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较。

六、String s = new String("xyz");创建了几个StringObject?是否可以继承String类?

两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。NewString每写一遍,就创建一个新的对象,它使用常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,那么这里就不会创建”xyz”了,直接从缓冲区拿,这时创建了一个StringObject;但如果以前没有用过"xyz",那么此时就会创建一个对象并放入缓冲区,这种情况它创建两个对象。至于String类是否继承,答案是否定的,因为String默认final修饰,是不可继承的。

标签:知识点,Java,String,StringBuffer,xyz,面试,叶痕,StringBuilder,字符串
From: https://www.cnblogs.com/lym21/p/16595062.html

相关文章

  • java stream List<List<Object>> 转List<Object>
    以下几种方法都可以private<T>List<T>mergeOne(Stream<List<T>>listStream){returnlistStream.flatMap(List::stream).collect(toList());}private<T>Lis......
  • 时隔4个月我面试字节又挂了|总结与展望
    面试过程半个月之前,我又一次结束了字节的日常实习面试,前后持续一个多星期,每一面都是2天内出结果,第四面一周未出结果,询问hr,面试流程已经终止,是的,又挂了。相比于几个月的那......
  • Javaweb09-请求跳转项目 分页条件查询 + 增删改 + 邮件登录
    1、Jar包<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven......
  • JAVA环境安装
    1.工具下载  下载JDK:https://www.oracle.com/java/technologies/downloads/#jdk18-windows    下载完成后点击安装一直“下一步”即可(其中可选择安装路径)  ......
  • java double精度丢失
    问题很简单,是由于我们输入的十进制的double类型的数据在进行计算的时候,计算机会先将其转换为二进制数据,然后再进行相关的运算。然而在十进制转二进制的过程中,有些十进制......
  • 【Java面试】如果一个线程两次调用start(),会出现什么问题?
    “如果一个线程两次调用start(),会出现什么问题?”如果这个问题出自阿里p6岗位第一面的提问,你能回答出来吗?大家好,我是Mic,一个工作了14年的Java程序员。关于这个问题,涉及......
  • java 树结构构建
    importio.swagger.annotations.ApiModel;importio.swagger.annotations.ApiModelProperty;importjava.util.ArrayList;importjava.util.List;/***组织树*/@ApiMo......
  • Java初学易错点(day1)
    1.重写方法时,方法名一致,参数不一致,为重写(专业点叫重载)。2.重写的方法,可以和之前的方法共同存在(部分语言不好理解的点,会erlang的应该能理解)。 3.就近原作和和this。......
  • <摘自https://blog.csdn.net/JavaAndLI/article/details/125359786>SQL分页查询的写法
    MySQL的分页实现是使用LIMIT关键字。Oracle的分页是实现主要是基于rownum行号。SQLServer的分页主要使用的关键字是TOP。 具体用法总结如下:本文中的变量名词说明:1,......
  • 混淆工具javascript-obfuscator
     https://blog.csdn.net/foupwang/article/details/103306332 npminstalljavascript-obfuscator-gjavascript-obfuscatorconfig.js--configHunxiaoConfig.js......