`
wangduorong
  • 浏览: 50158 次
社区版块
存档分类
最新评论

Java中String、StringBuffer、StringBuilder的区别及面试经常出现的问题

    博客分类:
  • java
阅读更多

1、String 、StringBuffer、StringBuilder的执行效率

      StringBuilder > StringBuffer > String

 

当然这个是相对的,不一定在所有情况下都是这样 如:

String a = 'a' + ‘b’ + 'c' 的效率比 StringBuffer buffer = new StringBuffer().append(‘a‘).append(’b‘).append(’c‘)要高

因此这三个类各有利弊,要根据自己的需要来决定用哪个

当字符串较少或者改动比较少的情况下 建议使用String

当字符串较多或者改动量比较大的情况下,建议使用StringBuilder,如果考虑使用线程,则用StringBuffer

 

1. 下面这段代码的输出结果是什么?

String a = "hello2";   String b = "hello" + 2;   System.out.println((a == b));

输出的结果是:true  "hello" + 2在编译的时候会隐式转换为"hello2" 因此a变量和b变量指向同一个对象

2.下面这段代码的输出结果是什么?

String a = "hello2";    String b = "hello";       String c = b + 2;       System.out.println((a == c));

输出的结果是:false  由于有引号的存在,所以编译的时候 不会把它当成一个常量

3.下面这段代码的输出结果是什么?

String a = "hello2";     final String b = "hello";       String c = b + 2;       System.out.println((a == c));

输出的结果是:true   final修饰的变量在编译的时候会将变量直接替换成真实的值 

4.下面这段代码输出结果为:

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static void main(String[] args) {
        String a = "hello2";
        final String b = getHello();
        String c = b + 2;
        System.out.println((a == c));
    }
     
    public static String getHello() {
        return "hello";
    }
}

输出的结果是:false  虽然该变量是被final修饰 但是它是通过方法来赋值的 而在编译的时候 并不知道方法会返回什么值 

5.下面这段代码的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
    public static void main(String[] args) {
        String a = "hello";
        String b =  new String("hello");
        String c =  new String("hello");
        String d = b.intern();
         
        System.out.println(a==b);
        System.out.println(b==c);
        System.out.println(b==d);
        System.out.println(a==d);
    }
}

输出的结果是:

false 

false

false 

true 

这里涉及到String.intern方法的使用,intern方法会先在运行时常量池中查找是否有相同的字符串,如果有则返回指向该地址的引用,因此a和d指向的是同一个对象

6.String str = new String("abc")创建了多少个对象?

这个问题在很多书籍上都有说到比如《Java程序员面试宝典》,包括很多国内大公司笔试面试题都会遇到,大部分网上流传的以及一些面试书籍上都说是2个对象,这种说法是片面的。

很显然,new只调用了一次,也就是说只创建了一个对象。

这里有一个混淆的地方,就是该代码在加载和执行的时候的区别 加载的是 确实只new一个对象 在执行的时候 又创建了一个String对象

面试官在问这个问题的是  最好是问清楚下"是这段代码在执行的时候创建了多少个对象还是单纯的这段话涉及到了多少对象"

当然 如果是笔试的话 还是按照网上的来 2个对象 一个abc 一个通过new 创建并初始化的对象 内容是abc

0
1
分享到:
评论

相关推荐

    Java面试题-每日一题:String、StringBuffer、StringBuilder的区别

    Java面试题-每日一题:String、StringBuffer、StringBuilder的区别

    java面试笔试题String 和StringBuffer的区别

    在Java编程语言中,`String`与`StringBuffer`是两个重要的字符串处理类,它们各自具有独特的特性和用途,尤其在面试或笔试中常被提及作为考察应聘者对Java基础知识掌握程度的重要知识点。 ### `String`类:不可变性...

    String&StringBuffer&StringBuilder三者之间的区别-经典解析.doc

    在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自有特定的使用场景和特性。理解这三个类的区别对于任何Java开发者,无论是初学者还是经验丰富的程序员,都是非常重要的...

    面试题java StringBuffer和StringBuilder类常见操作和用法

    在Java编程语言中,StringBuffer和StringBuilder类是处理可变字符串序列的重要工具。它们提供了丰富的功能,如添加、插入、删除、替换字符,以及反转字符串序列等。由于这两个类的特性,它们在处理大量字符串操作时...

    第5讲 String、StringBuffer、StringBuilder有什么区别1

    在Java中,我们有三种主要的字符串类:String、StringBuffer和StringBuilder,它们各自具有不同的特性和适用场景。 首先,`String`类是Java中的一个基础且不可变的类,被声明为`final`,其内部属性也是`final`的。...

    深入剖析java中String、StringBuffer、StringBuilder的区别

    Java中的String、StringBuffer和StringBuilder类都是用于处理字符串的,但它们之间存在显著的区别,主要体现在字符串的可变性、线程安全性和性能优化上。 首先,关于**可变性**,String类是不可变的。这意味着一旦...

    JAVA面试题 从源码角度分析StringBuffer和StringBuilder的区别

    JAVA面试题,从源码角度分析StringBuffer和StringBuilder的区别 在本文中,我们将从源码角度分析StringBuffer和StringBuilder的区别,这两个类都是Java中常用的字符串操作类,但是它们之间有什么区别呢?下面我们来...

    java--面试题大全(附答案

    String和StringBuilder、...StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

    10个Java经典的String面试题

    "Java字符串面试题详解" 在 Java 中,String 是一个非常重要的类,它在实际应用...这 10 个 Java 经典的 String 面试题涵盖了 String 的基本特点、使用方法和常见问题。掌握这些知识点对于 Java 开发者来说非常重要。

    java面试常见问题

    在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象。因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 ...

    面试的经典程序(String,StringBuffer,list,Connections)

    在Java编程语言中,面试时常会涉及到一些核心概念和技术,如字符串操作、数据结构和并发处理。本篇文章将深入探讨标题和描述中提及的关键知识点,包括`String`、`StringBuffer`、数组、集合容器(如`List`)以及并发...

    Java面试题大全2023版.docx

    Java 是一种广泛使用的编程语言,面试中经常会出现各种问题,本文档总结了 Java 面试题大全 2023 版,其中涵盖了 Java 基础、Java 集合、Java 多线程、Java 网络编程等方面的知识点。 一、Java 基础 1. JDK 和 JRE...

    10个有关String的面试问题Java开发Java经验技

    在Java编程语言中,String类是开发者经常打交道的一个核心类,尤其在面试中,String对象的特性和操作经常成为考察的重点。以下就是10个关于Java String的面试问题,这些问题涵盖了String的基础、性能优化以及一些...

    java面试问题总结

    9.StringBuffer和StringBuilder的区别?(实际面试题) 1.在执行速度方面的比较:StringBuilder 快于 StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符...

    BATjava面试含答案

    本文总结了 BAT 面试中常见的 Java 面试题,涵盖了 List、Map、String 等基本数据结构和面试题,旨在帮助读者更好地了解 BAT 面试的常见问题。 一、List 相关知识点 1. List 是有序的,ArrayList 和 LinkedList 是...

    2022最新java面试题大全

    2. String 和 StringBuffer、StringBuilder 的区别:String 定义的字符串不可改变,StringBuffer 和 StringBuilder 可以在原对象基础上进行操作,改变对象内容,StringBuffer 是线程安全的,StringBuilder 是线程不...

    Java面试宝典2018-最全面试资料

    Java SE常用API如Math类、String类、StringBuilder和StringBuffer类的使用细节和区别也在书中有所涉及。 Java的数据类型包括基本数据类型和引用数据类型,书中详细讨论了各种数据类型的内存占用、使用场景及特性。...

    10个Java经典的String面试题!.pdf

    6. **String、StringBuffer和StringBuilder的区别**:String是不可变的,而StringBuffer和StringBuilder是可变的。在多线程环境中,StringBuffer是线程安全的,适合多个线程同时访问;StringBuilder则没有线程安全...

Global site tag (gtag.js) - Google Analytics