String 不是java中的基本类型,在java中,字符串属于对象,Java 提供了 String 类来建立和操做字符串。java
String 类是不可改变的,因此你一旦建立了 String 对象,那它的值就没法改变了数组
String message = "hello"; System.out.println(message); char [] mes_1= {'h','e','l','l','o'}; String message_1 = new String(mes_1); System.out.println(message_1);
在执行到双引号包含字符串的语句时,如String a = "123",JVM会先到常量池里查找,若是有的话返回常量池里的这个实例的引用,不然的话建立一个新实例并置入常量池里。因此,当咱们在使用诸如String str = "abc";的格式定义对象时,老是想固然地认为,建立了String类的对象str。担忧陷阱!对象可能并无被建立!而可能只是指向一个先前已经建立的对象。只有经过new()方法才能保证每次都建立一个新的对象。安全
5.关于equals和==多线程
(1)对于==,若是做用于基本数据类型的变量(byte,short,char,int,long,float,double,boolean ),则直接比较其存储的"值"是否相等;若是做用于引用类型的变量(String),则比较的是所指向的对象的地址(便是否指向同一个对象)。app
(2)equals方法是基类Object中的方法,所以对于全部的继承于Object的类都会有该方法。在Object类中,equals方法是用来比较两个对象的引用是否相等,便是否指向同一个对象。ui
(3)对于equals方法,注意:equals方法不能做用于基本数据类型的变量。若是没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;而String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。其余的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。线程
6. String、StringBuffer、StringBuilder的区别对象
(1)可变与不可变:String是不可变字符串对象,StringBuilder和StringBuffer是可变字符串对象(其内部的字符数组长度可变)。继承
(2)是否多线程安全:String中的对象是不可变的,也就能够理解为常量,显然线程安全。字符串
StringBuffer 与 StringBuilder 中的方法和功能彻底是等价的,只是StringBuffer 中的方法大都采用了synchronized 关键字进行修饰,所以是线程安全的,而 StringBuilder 没有这个修饰,能够被认为是非线程安全的。
(3)String、StringBuilder、StringBuffer三者的执行效率:
StringBuilder > StringBuffer > String 固然这个是相对的,不必定在全部状况下都是这样。
好比String str = "hello"+ "world"的效率就比 StringBuilder st = new StringBuilder().append("hello").append("world")要高。
所以,这三个类是各有利弊,应当根据不一样的状况来进行选择使用: 当字符串相加操做或者改动较少的状况下,建议使用 String str="hello"这种形式; 当字符串相加操做较多的状况下,建议使用StringBuilder,若是采用了多线程,则使用StringBuffer。