String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

String是一个类不是基本数据类型,它初始化的一个变量a(看成对象是错误的)并被赋值一个引用指向对象“Java”,这个a不能指向其他引用

例:String a="Java";①

     a="HTML5",②                     即②是错误的

 

String s=new String("abc");创建了几个对象呢?

两个(一个堆里,一个常量池里),此外还有一个放在栈中的引用;

String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

内部原理是这样的;

在JVM的工作过程中,会创建一片的内存空间专门存入String对象,我们把这片内存空间叫做String池。

先在String池中创建了一个String对象储存“abc”,再通过new 又创建了一个String对象,然后把引用给了s;

 

String s=new String("XYZ")+new String("XYZ");创建了几个对象呢?

四个

String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

 

 

String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

因为当String池中已经存在了"abc"对象,就不会在创建相同的对象了;(这里和上述有矛盾)

 

 

String类以及如何将字符串转化为数组,将字符和各种数值返回字符串格式,Integer和int 区别,StringBuilder和StringBuffer区别

String中的 ==符号比较的是  是否是同一个对象,s1和s3都是指常量池“Welcome to Java”,s2这里指向两个对象(堆中的和常量池中的),所以对象不同;

 

 

 

 

 

既然能把数组转化为字符串(在上几张有),那也可以将字符串转化为数组(字符串数组):

 char[ ] chars="Java".toCharArray();     //调用方法toCharArray来讲“Java”转化为chars【0】=“J”,chars[1]="a"....

在写几个还能把字符串数组转化为字符串的方法:

String s=new String(new char[ ]{"J","a","v","e"});

String  s=new String.valueOf(new char[ ]{"J","a","v","e"});

 

字符和各种数值返回字符串:

String.valueOf(字符和各种数值),    例String.valueOf(2.04),返回的就是'2','0','4'构成的字符串

 

 

 

1.Integer是一个引用类型(包括类,接口,数组),int是一个基本数据类型(八大);

2.Integer和int都能表示一个数;

3.Integer和int不能互通,例如泛型要用Integer而不是int

4.对基本类型来说,对应的内存放的就是基本类型值;但对于引用类型Circle c,Integer i,String s等等来说对应内存放的是这些对象;

 

 

1.StringBuilder是速度最快的,但是在多线程中不安全,所以多用于单线程大量数据处理;

2.StringBuffer比StringBuilder速度慢些,但是在多线程中是安全的(修改缓冲区的方法是同步的),所以多用于多线程大量数据处理;

3.String用于少量数据处理,String是final类,不能被继承;

StringBuilder和StringBuffer非常擅长于字符串的增删改,倒置等等