Java之字符串学习

java中String的使用十分频繁,是咱们要学习的重点,在说String以前,咱们要知道堆跟栈的区别。java

java中的数据类型分原生数据类型(primitived types)有八种(byte,char,boolean,int,short,float,double,long)跟包装类型(把原生数据类型包装起来)也是八种,有Byte,String,Boolean,Integer,Short,Float,Double,Long。其中原生数据类型所有存在栈中,包装类数据存在堆中。ide

栈的优势:学习

一、栈的存取速度快,差很少仅次于位于cpu内的寄存器;对象

二、数据可共享。继承

缺点:内存

一、存在栈中的数据大小与生存期必须是肯定的,因此缺少灵活性。字符串

堆的优势:编译器

一、可动态分配内存大小,生存期也没必要事先告诉编译器;it

二、java的垃圾回收会自动的回收再也不使用的数据。编译

缺点:

一、因为在运行时动态分配内存,会致使存取速度变慢。

因为String类是final,因此其内容是不可改变的,这点很重要。因为程序可能要使用到大量的字符串,而字符串类的内容一旦建立将不能被改变,因此java中提供了字符串池(String pool)的机制,在里面存放字符串,能够避免重复建立相同内容的字符串。建立字符串能够采用字面赋值(eg:String str = "hello"; )和new方法(eg: String str = new String("hello");),当采用字面赋值时,首先会在String pool中查找是否存在"hello"这个对象,若是不存在,则在String pool中建立一个"hello"对象,而后将这个对象的地址返回来,赋给引用str,这样str会指向String pool中的这个"hello"字符串对象;若是存在则不建立任何对象,直接将String pool中的这个对象地址返回来,赋值给str引用;当采用String s = new String("hello");首先会在String pool中查找是否有"hello"字符串对象,有的话就不会在String pool中再去建立这个对象,直接在堆中建立一个"hello"字符串对象,而后将堆中的这个对象地址返回来,赋给s引用,这样s就指向堆中建立的字符串对象;若是没有,就会先在String pool中建立"hello"对象,而后再在堆中建立一个"hello"对象,最后将堆中的字符串对象的地址返回来并赋给s引用,此时s指向堆中所建立的字符串对象。

java中有一个特殊的类Object类,除了它,全部的类都直接或间接地继承它,Object类中定义了八个方法,其中一个是equals()方法,对于Object类的equals()方法来讲,它是判断调用该方法的引用与传进来的引用是否相等,即地址是否同样,是否指向同一个对象,可等价于==,但String类重写(override)了改方法,使得该方法判断的是当前字符串与传进来的字符串的内容是否一致(不是判断引用)。因此对于String对象的相等性判断要使用equals()方法,而不适用"=="。

String是常量,其对象一旦建立完毕就没法改变,若是使用"+"拼接字符串,会生成新的String对象,而不是向原有对象追加内容。

相关文章
相关标签/搜索