java面试之String的理解(自我理解)
1.String是基本数据类型吗?
不是,是对象,引用数据类型
2.String是可变吗?
不可变,String是final类型的.
3.怎样比较两个字符串的值相同,怎样比较两个字符串是否为同一对象?
比较值相同用equals,比较是否为统一对象用 ==
4.switch中可以用String吗?
在jdk5中switch支持枚举,在7中支持String,但是通过反编译可以看出就是本质还是int,case后是hashcode,之后使用equals进行比较,所以String的效率会比较低
5.String str = new String("abc");这条语句创建了几个对象?为什么?
创建了两个对象,"abc"本身就创建在常量池中,通过new又创建在堆中.
6.String,StringBuffer,StringBuilder有什么区别?
String是字符串常量,不可变,其余两个是可变的.StringBuffer是线程安全,但是效率较低,StringBuilder是线程不安全,但是速度较快.
7.String.trim()方法去掉的是哪些字符?
去掉的是首尾的空白字符.
8.String可以被子类继承吗?
既然是final类,肯定不能被继承.
9.可以自定义java.lang.String类并使用吗?
可以自定义java.langString类并编译成功,但不能被加载使用.
10.String与byte[]如何进行相互转换?
String->byte[] 使用String类的getBytes方法. byte[]->String通过new String(byte[])构造器
这里额外说一下String被设计成final的好处?
1.缓存Hashcode,java中经常会用到字符串的哈希码,字符串的不可变保证其hashCode永远保持一致,这样可以变不必要的麻烦,每次使用字符串的hashcode不用重新计算,更加高效.
2.安全性.String类被广泛的使用在java类中充当参数,如果字符串可变,那么网络连接,打开文件等操作可能导致安全问题,可变的字符串也可能导致反射的安全问题,因为他的参数也是字符串.
3.不可变对象天生就是线程安全.不可变对象可以自由在线程间共享,不需要同步处理.
总之,String类设计为不可变主要目的是为了安全和高效.
java面试之String的理解(自我理解)的更多相关文章
- java面试-垃圾回收器谈谈你的理解
一.垃圾回收算法: 引用计数 复制算法 标记-清除 标记-整理 二.垃圾回收的方式: 串行(Serial).并行(Parallel).并发(CMS).G1 1.串行垃圾回收器(Serial) 它为单线 ...
- java面试-谈谈你对OOM的理解
一.OOM(OutOfMemoryError): 对象无法释放或无法被垃圾回收,造成内存浪费,导致程序运行速度减慢,甚至系统崩溃等严重后果,就是内存泄漏.多个内存泄漏造成可使用内存变少,会导致内存溢出 ...
- java面试-谈谈你对volatile的理解
一.volatile特性: volatile是Java虚拟机提供的轻量级的同步机制.主要有三大特性: 保证可见性 不保证原子性 禁止指令重排序 1.保证可见性 1)代码演示 AAA线程修改变量numb ...
- java面试必备String详解
引言 众所周知在java里面除了8种基本数据类型的话,还有一种特殊的类型String,这个类型是我们每天搬砖都基本上要使用它. String 类型可能是 Java 中应用最频繁的引用类型,但它的性能问 ...
- Java面试之String、StringBuffer和StringBuilder的区别和原理
首先我们先来谈谈String: String 对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象,即修改了 String 的引用. 因为 String 的底层是用数组来 ...
- java面试之String源码中equals具体实现
废话不多说,直接看代码,注释已经写在上面了: public boolean equals(Object anObject) { if (this == anObject) {//比较两个对象的地址 r ...
- 深入理解Java中的String
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
- 【转】深入理解Java中的String
原文链接:http://www.cnblogs.com/xiaoxi/p/6036701.html 一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码 ...
- 【Java面试】面试遇到宽泛的问题,这么回答就稳了,谈谈你对Redis的理解
"谈谈你对Redis的理解"! 面试的时候遇到这类比较宽泛的问题,是不是很抓狂? 是不是不知道从何开始说起? 没关系,今天我用3分钟教你怎么回答. 大家好,我是Mic,一个工作了1 ...
随机推荐
- springboot elasticsearch 集成注意事项
文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...
- 听翁恺老师mooc笔记(7)--字符串1
C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什 ...
- xcode进行代码覆盖率测试
去年写的文章,搬到cnblog 本文所述的方法只对xcode5做过测试,xcode6是否可行尚未可知. 配置编译选项 首先请参考苹果官方的文档Configuring Xcode for Code Co ...
- Struts2之Action的实现
对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filte ...
- caffe使用ctrl-c不能保存模型
caffe使用Ctrl-c 不能保存模型: 是因为使用的是 tee输出日志 解决方法:kill -s SIGINT <proc_id> 或者使用 GLOG_log_dir=/path/to ...
- STL之queue
描述 使用STL中的queue,完成入队.出队.获取队首.获取队尾等基本操作. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { queue<int> ...
- linux作为服务器,利用top命令查看服务进程的耗用情况
top命令查看进程服务如下: 其中shift+m可以按照内存的消耗进行排序,shift+p是按照cpu的消耗进程,排序,其中对cpu的消耗是一定时间,谁占用的时间越长消耗越大, 还有按空格键,会刷新一 ...
- Java服务器端生成报告文档:使用SQL Server Report Service(SSRS)
SQL Server Report Service(SSRS)提供了Asp.Net和WinForm两类客户端组件封装,因此使用C#实现SSRS报表的导出功能,仅需要使用相应的组件即可. Java操作S ...
- 第四章 JavaScript操作DOM对象
第四章 JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...
- linux 下 /bin /sbin 的区别
/bin,/sbin,/usr/bin,/usr/sbin区别 / : this is root directory root 用户根目录 /bin : command ...