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类设计为不可变主要目的是为了安全和高效.
转载于:https://www.cnblogs.com/wadmwz/p/8798786.html
java面试之String的理解(自我理解)相关推荐
- SWIFT MX报文基础函数与Java语言中String的方法对照理解
SWIFT MX报文基础函数与Java语言中String的方法对照理解 前言 一.SWIFT是什么? 二.SWIFT MX是什么? 二.报文基础函数与Java语言中String的方法对照表 总结 前言 ...
- Java面试之谈谈对Volatile的理解
谈谈对Volatile的理解 Volatile在日常的单线程环境是应用不到的 Volatile是Java虚拟机提供的轻量级的同步机制(三大特性) 保证可见性 不保证原子性 禁止指令重排 可能这么说,还 ...
- Java面试之谈谈对CAS的理解
CAS底层原理 概念 CAS的全称是Compare-And-Swap,它是CPU并发原语 它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的 CAS并发原语体现在Jav ...
- java里面的string类型,java中的String类型(不知道理解的好不,请教大神)
当执行String a = "abc"; 时候(前提条件是:执行这行代码之前在常量池中没有abc,若有,a直接引用在常量池中abc不在创建一个对象,若无,执行下面的描述) java ...
- 深入理解Java中的String
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class Stringimplements java.io.Seri ...
- 深入理解Java中的String(原地址https://www.cnblogs.com/xiaoxi/p/6036701.html)
深入理解Java中的String 一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class Stringimplem ...
- Java常量字符串String理解
Java常量字符串String理解 以前关于String的理解仅限于三点: 1.String 是final类,不可继承 2.String 类比较字符串相等时时不能用" == ",只 ...
- Java面试一百道题目(第一题)-什么是面向对象,谈谈你对面向对象的理解
Java面试一百道题目(第一题) 1,什么是面向对象,谈谈你对面向对象的理解. 思路:用面向过程和面向对象做对比来突出什么是面向对象. 答:高级语言分为,面向对象语言和面向过程语言,面向过程语言,距离 ...
- 常见java面试遇到的ORM框架理解
常见ORM框架理解 前言: JAVA编程免不了和数据库打交道,那么如何高效便捷地操作数据库,也是一个需要而对的问题,原生的基于JDBC的方式当然是非常低效,而且要写一大堆无用的模板代码,不值得选取.好 ...
- Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(三)
Java面试宝典之数据结构基础 -- 线性表篇 作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn. ...
最新文章
- 梯度下降理解和梯度下降计算检查斯坦福
- js基础到精通全面教程--JS教程(转载)--推荐
- python编程与特征提取_Python进行特征提取的示例代码
- 【Java】Java 语言的初步认识及工作应用范围
- show()和exec()的区别
- java中如何关闭文件,在Java中捕获IOException后如何关闭文件?
- Bailian2713 肿瘤面积【基础】
- 基于深度极限学习机DELM的回归预测
- AOD实践,modis数据下载,modis数据处理,
- Sketch54 for mac汉化破解版
- PHP自动识别电话名字地址,你用PHP,如何实现地址自动识别的功能
- 为什么书呆子不受欢迎
- 【研一小白论文精读】《Big Self-Supervised Models are Strong Semi-Supervised Learners》
- 苹果手机快速获取UDID方式
- thingsboard安装源码编译
- duxing201606很快乐
- web前端 | 一条“不归路” - 学习路线
- python基础实例教程 微课版-Python爬虫开发实战教程(微课版)
- mac u盘linux 双系统安装教程,U盘安装MAC双系统完美方案实现在MAC系统下使用双系统...
- 叉包舍 - PPPoE之常见拨号错误代码及处理
热门文章
- 十亿级同步,百亿级调用,千亿级访问量的开放技术平台如何炼成?
- 蚂蚁金服CTO程立:金融级分布式交易的技术路径
- 惊爆!一行正则表达式引发的 CPU 惨案
- 在 Google 工作是什么体验?
- onSaveInstanceState onRestoreInstanceState
- python替换word中字符串_python:替换/替换字符串中的所有wholeword匹配
- 如何在你的blog中添加炫酷的飘雪动画效果
- Java并发编程:进程和线程之由来__进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能...
- Android真武剑之PopupWindow之三国杀
- 筛选DataTable数据的方法