2018-09-26内部类、String、StringBuilder与StringBuffer、

1.内部类

一般情况,我们把类定义成独立的单元。有些情况下,我们把一个类放在另一个类的内部定义,称为内部类。

内部类的作用:

    1.    内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

    2.    内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。

内部类的使用场合:

由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,通常内部类在只为所在外部类提供服务的情况下优先使用。

2.String   (string a = "t")会创建一个对象 然后再对象中的a去指向方法区中常量的a

public class Test {

public static void main(String[] args) {

    char []c ={'a','b','c','d'};

    String str = new String("abcd");

    String str2 = new String("abcd");

    System.out.println(str.equals(str2));//true

    System.out.println(str2==str);//false

    String str3 ="def";

    String str4 ="def";

    System.out.println(str3.equals(str4));//true

    System.out.println(str3==str4);//true

    }

}

        字符内存分析图:


.可能会问的面试题
//总共1001个对象

String b = "abc";//(""首先这里会创建一个)

for (int i = 0; i < 1000; i++) {

    b = b + i;

}

//总共1002个对象

String a = new String("abc");//这里会创建2个对象(""首先这里会创建一个; new()也会创建一个对象)

for (int i = 0; i < 1000; i++) {

    a = a + i;

}

.StringBuilder与StringBuffer

 一.StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。

StringBuffer可变字符串,线程安全,但效率低,不推荐使用。

String是不可变字符串,根据实时情况使用,在循环当中不要使用,因为会产生好的没用的字符串。

二. String,StringBuilder要学会查看api的良好习惯,通过api学会使用常见的方法,自己利用案例来理解每个方法的具体含义。这样你会更深刻理解每个方法的使用。

三. 如果看不懂api可以到我们官网去看三百集的第56与57集,理解一下字符串的扩容原理。方便理解后面容器的内容。

面试题的回答

       StringBuilder与StringBuffer的区别,StringBuilder与String的区别。

1)StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。

2)String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final  char  value[] 等方法的原因。

3)如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符穿做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。

你可能感兴趣的:(2018-09-26内部类、String、StringBuilder与StringBuffer、)