-
2022-01-28 16:48:46
1. String是基本数据类型吗?
- String不是基本数据类型
2. String是可变的吗?
- String是final类型的,不可变
3. 怎么比较两个字符串的值一样,怎么比较两个字符串是否为同一对象?
- 比较字符串的值是否相同用equals,比较字符串对象是否是同一个使用 ==
4. switch中可以使用String类型吗?
- jdk7+中的switch可以使用String类型
5. String str = new String(“abc”); 创建了几个对象?
- 创建了两个,“abc”本身创建在常量池,通过new又创建在堆中
6. String、StringBuffer、StringBuilder有什么不同?
- String、StringBuffer、StringBuilder最大的不同是String不可变,后者可变。StringBuffer是线程安全的,StringBuilder是线程不安全但速度较快
7. String.trim()方法去掉的是哪些字符?
- trim去掉字符串首尾的空白字符
8. String可以被子类继承吗?
- String是final的,不能被继承
9. 可以自定义java.lang.String类并使用吗?
- 可以自定义java.lang.String类并编译成功,但不能被加载使用
10. String和byte[]两者之间如何转换?
- String—>byte[]通过String类的getBytes方法;byte[]—>String通过new String(byte[])构造器
更多相关内容 -
Java常用类String的面试题汇总(java面试题)
2020-08-30 03:23:19主要介绍了Java常用类String的面试题汇总,非常不错,具有参考借鉴价值,需要的朋友可以参考下 -
String 常见面试题和解析
2022-03-11 23:16:15String 类被 final修饰不能被子类继承,进而避免了子类破坏 String不可变。 实际中可变的原因: 其实并不是改变 String ,是新创建了一个 String 对象指向改变后的值,原本的 String 成为副本字符串对象存留在内存...1、String为什么是不可变字符串?但是我们在实际应用中 String是可以被改变的,能详细说一下嘛?
不可变字符串主要是:
- 保存字符串的数组被
final
修饰并且是私有的,并且 String 类没有提供和暴露修改这个字符串的方法。 - String 类被
final
修饰不能被子类继承,进而避免了子类破坏String
不可变。
实际中可变的原因:
其实并不是改变 String ,是新创建了一个 String 对象指向改变后的值,原本的 String 成为副本字符串对象存留在内存中。
2、String str= new String(“abc”); 和String str=“abc” 这两者的区别在哪里?
String str= new String("abc")
:不管字符串常量池中存不存在 “abc” ,直接就创建直接新建一个字符串 “abc” (注意新建的字符串 “abc” 不是在字符串常量池中,而是在堆中),然后将其赋给str。这种效率低于使用字符串常量池的方式。
String str="abc"
:首先查看字符串常量池中是否存在字符串 “abc” ,如果存在则直接将“abc”赋给str,如果不存在则先在字符串常量池中新建一个字符串 “abc” ,然后再将其赋给str。
拓展:判断 String 类型的值相等的问题
实例一:
//指向字符串池 String str1 = "java"; //指向字符串池 String str2 = "blog"; String s = str1+str2;
+
运算符会在堆中建立起两个 String 对象,这两个对象的值分别是 “java” , “blog” ,也就是说从字符串常量池中复制这两个值,然后再堆中创建两个对象。然后再建立对象 s ,然后将 “javablog” 的堆地址赋给 s 。String s = str1+str2
这句话共创建了3个 String 对象。//结果是false System.out.println(s=="javablog");
实例二:
//直接将javablog对象放入字符串常量池中 String s = "java" + "blog"; //结果是true System.out.println(s=="javablog");
实例三:
//不放在字符串常量池中,而是在堆中分分配 String s=str1+"blog"; //结果是false; System.out.println(s=="javablog");
3、String中 “+” 和 StringBuffer 中的 append 性能上有啥区别?
"+"
每次对 String 类型进行 “+” 的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
所以经常改变内容的字符串最好不要用 String 的 “+” 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
StringBuffer
使用 StringBuffer 类的 append 方法时每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
需要线程安全使用
StringBuilder
注意:
① 如果 + 号两边的字符串都在字符串常量池中话,"+" 的性能比 StringBuffer 的 append 快。如下示例:
//字符串常量池中有 a 和 b String str = "a" + "b"; StringBuffer sb = new StringBuilder("a").append("b"); //性能 str > ab
② 以下情况 Sting 的 “+” 实际上是使用 StringBuilder (或者 StringBuffer )对象的 append 方法:
//指向字符串池 String strA = "a"; //不放在字符串常量池中,而是在堆中分分配 String strAB = strA + "b";
上述的 strAB 会在对内存中创建 StringBuilder(或者 StringBuffer)对象,通过 append 方法拼接成 “ab” 对象,此时的 “ab” 是 StringBuilder (或者StringBuffer )类型的,通过调用 toString 方法转成 String 对象,此时 strAB 指向的是堆内存中为 “ab” 的 String对象。
- 保存字符串的数组被
-
String类常见面试题
2019-05-01 13:44:47答案解释:String类代表字符串,字符串是常量,常量需要进入到内存中的方法区的常量池(进入常量池规则:如果常量池中没有这个常量,就创建一个,如果有就不再创建了)。所以s1首先会在常量池中创建“abc”对象,“abc...1.判断定义为String类型的s1和s2是否相等?
答案解释:String类代表字符串,字符串是常量,常量需要进入到内存中的方法区的常量池(进入常量池规则:如果常量池中没有这个常量,就创建一个,如果有就不再创建了)。所以s1首先会在常量池中创建“abc”对象,“abc”对象是有地址值的,“abc”对象将地址值赋给s1。当s2的时候,此时常量池中已经存在了“abc对象”,所以就不需要再创建了,s2的引用也指向了常量池中的“abc”对象,两个引用指向了同一个对象,s1和s2地址值一样,所以==号比较的时候返回true;String类重写了equals方法,比较的是属性值,s1和s2的属性值都是“abc”,所以是true
2.下面这句话在内存中创建了几个对象?
String s = new String("abc");
答案及解释:2个对象。s首先会在常量池创建“abc”字符串常量,当new的时候就会在堆内存中创建一个对象,此时会把常量池中的字符串常量拷贝一份副本到给到堆内存中的对象,堆内存中的这个对象就会把地址值赋给s。常量池中对象的地址值和堆内存中对象的地址值是不一样的,s指向的是堆内存中的对象,不是常量池中的对象。此时堆内存中有一个对象,常量池中有一个对象,所以创建了2个对象。查看API,String的有参构造
3.判断定义为String类型的s1和s2是否相等?
答案解释:由面试题2可知,当执行完s1的时候,内存中会有两个对象,一个在堆内存,一个在常量池,且地址值是不一样的,s1指向的是堆内存中的对象,而当执行到s2的时候,s2指向的是常量池中的对象,地址值不一样,所以==号判断的时候返回false。s1和s2的属性值是一样的,所以equals方法比较时返回true
4.判断定义为String类型的s1和s2是否相等?
答案解释:Java中有常量优化机制,“a”、“b”、“c”本身就是字符串常量,所以在编译时,"a"+"b"+"c"就是“abc”字符串,所以就在常量池创建了“abc”字符串,当执行s2的时候,此时常量池中已经存在了“abc”,所以==号比较返回true。equals方法比较毫无疑问是true。
5.判断定义为String类型的s3和s2是否相等?
答案解释:s1+"c"中s1不是常量,所以不能有常量优化机制来分析。equals方法比较毫无疑问是true。
- s1和s2会分别在常量池中创创建"ab"、"abc"两个对象
- s3的时候是字符串串联,API解释如下图。所以s3的时候会在对内存中创建StringBuilder(或者StringBuffer)对象,通过append方法拼接成“abc”对象,此时的“abc”是StringBuilder(或者StringBuffer)类型的,通过调用toString方法转成String对象,此时s3指向的是堆内存中这个String对象
- s2指向的是常量池中的对象,s3指向的是堆内存中的对象,所以==号比较返回false
-
java中String类的笔试面试题含答案
2020-12-21 05:28:01java中String类的笔试面试题含答案 1.下面程序的运行结果是()(选择一项) String str1=”hello”; String str2=new String(“hello”); System.out.println(str1==str2); A. true B. false C. hello D. he 答案... -
C/C++面试题:编写类String的构造、析构和赋值函数
2020-08-18 19:34:36本文主要介绍了C/C++面试题:编写类String的构造、析构和赋值函数,解析构造函数、析构函数和赋值函数的编写方法 -
Java-String类常见面试题
2016-12-30 15:39:27Java-String类常见面试题1.判断定义为String类型的s1和s2是否相等
String s1="abc"; String s2="abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2));
运行结果为
true true
==比较基本数据类型的时候比较的是值,比较引用类型的时候比较的是地址值。这里是比较的引用类型。
创建“abc”的时候先到常量池看看有没有,没有的话就创建一个,有的话就直接用。所以s1和s2的存的地址值相同,指向的是同一个。
equals是Object中的方法,只能用于引用类型,也是比较的地址值。但String类重写了equals方法,来比较字符串是否相等。
2.这句话在内存创建了几个对象
String s1=new String("abc");
答案是两个
执行“abc”的之后在常量池创建一个,new的时候在堆里创建一个,并把常量池中的“abc”复制了一份过去。然后将其引用赋给了s1。3.判断定义为String类型的s1和s2是否相等
String s1=new String("abc");//堆内存的地址 String s2="abc";//常量池的地址 System.out.println(s1==s2); System.out.println(s1.equals(s2));
运行结果为
false true
4.判断定义为String类型的s1和s2是否相等
String s1="ab"; String s2="abc"; String s3=s1+"c"; System.out.println(s3==s2); System.out.println(s3.equals(s2));
运行结果为
false true
先通过StingBuffer将“ab”和“c”合并成“abc”,然后通过toString将其转换成字符串。
Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。 -
经典面试题—string类的详细分析与实现
2018-04-16 19:57:24【摘要】在常见的面试场景中,如果面试官想要考察你对于C++的掌握程度 能够很完整的写出一个string类是很重要的。因为string类包含了C++的 很多知识,可以系统的将你的知识发挥出来。在这篇博客中,我将会详细地 ... -
java String类常见面试题
2018-07-26 10:07:09equals只能比较引用数据类型,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别 ,重写后的equals方法比较的是对象中的属性。 2.字符串常量存储在常量池,而new String 创建对象,在... -
有关于 String 类的面试题
2018-07-11 18:17:27上次写了关于 String 类的一些方法今天我们来做一些关于 String 类的面试题关于 String类 的常见面试题1)判断String类型的 s1 和 s2 是否相... -
java中那些关于String的面试题
2017-08-18 18:20:011、String是基本数据类型吗?String是java lang包下的一个类,不像基本数据类型int long等。...在java中,所有基本类型的包装类,如Integer和Long类,都是不可变类,java.lang.String也是不可变类,虽然他不是基本类 -
关于String的面试题
2019-01-26 16:43:041.以下代码分别创建了几个对象 String str1 = “123”;String str2 = new String(“123”):; 我们先来看下面这张图 ...再来看这一道题 所以我们知道,“123”这个常量是存储在方法区的常量池中的... -
Java String 面试题以及答案
2017-12-08 15:25:23String是最常使用的Java类之一,整理的了一些重要的String知识分享给大家。 作为一个Java新手程序员,对String进行更深入的了解很有必要。如果你是有几年Java开发经验,可以根据目录选择性的阅读以下内容。 -
String类相关面试题总结
2018-07-03 16:31:22String类相关面试题总结一、判断String类型的s1和s2是否相等 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); //true System.out.println(s1.equals(s2)); //... -
计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi
2022-05-22 14:49:34计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi -
10个Java经典的String面试题!.zip
2021-09-26 22:08:3510个Java经典的String面试题!.zip -
Java基础知识面试题(2020最新版)
2020-02-19 12:11:27,优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结,删除了低频问题,添加了一些常见面试题,对文章进行了精简优化,欢迎大家关注! 【技术人成长之路】,助力技术人成长!更多精彩文章第一... -
面试题系列第8篇:谈谈String、StringBuffer、StringBuilder的区别?
2020-09-15 17:30:44《Java面试题系列》:一个长知识又很有意思的专栏。...如果你回答:String类是不可变的,StringBuffer和StringBuilder是可变类,StringBuffer是线程安全的,StringBuilder则不是线程安全的。 就上面的总结而. -
C++面试题:String类的实现
2016-06-08 10:32:22编写类String的构造函数、析构函数和赋值函数,已知类String的原型为: class String { public : String( const char *str = NULL); // 普通构造函数 String( const String &other); // 拷贝... -
String面试题
2020-10-30 19:48:03String s1 = "123"; String s2 = "123"; System.out.println(s1 == s2); // true System.out.println(s1.equals(s2)); // true String字符串属于常量,常量需要进入内存中的方法区的常量池(进入常量池规则:... -
C++经典面试题之---String类
2009-08-06 11:39:00写出string类的构造函数,拷贝构造函数,析构函数,赋值函数。 这道题目是一道相当经典的C++开发题目,是面试C++程序员时经常考的,但这次无奈徐*碰上了,为什么呢?因为徐* 入职后作的是白盒测试。#includeusing ... -
最新Java面试题,常见面试题及答案汇总
2019-07-12 08:56:55Java最新面试题、面试题答案汇总 -
14String类、StringBuilder类、相关面试题
2021-11-15 19:24:32文章目录第十四天1、String类1.1 判断功能1.2 获取功能1.3转换功能1.4分割...类的方法3、String相关的面试题3.1 面试题13.2 面试题23.3 面试题34、基本数据类型和包装类的面试题4.1 面试题14.2 面试题24.3 面试题34.4 ... -
Java 基础高频面试题(2022年最新版)
2021-03-31 23:39:26最新 Java 基础高频面试题 -
Java基础面试:一文看懂String类中的常用方法
2021-09-19 15:30:45本次文章介绍的是Java基础面试常问面试知识点String 1、int length(): 返回字符串的长度: return value.length 2、char charAt(int index): 返回某索引处的字符return value[index] 3、boolean isEmpty(): 判断... -
Java String常见面试题汇总
2016-03-26 11:41:28String类型的面试题 1. String是最基本的数据类型吗? 基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个. Java.lang.String类是final类型的,因此不能继承,修改这个类.为了提高... -
Java中级面试题及答案(120道Java中级面试题大汇总)
2021-11-08 15:20:14Java中级面试题及答案【最新版及答案,干货!!!这是一个中级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。 Java中级面试永远是程序员... -
110道Java初级面试题及答案(最新Java初级面试题大汇总)
2021-11-08 15:21:38史上最全Java初中级面试题,发现网上很多Java初级面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有...