zoukankan      html  css  js  c++  java
  • Java之字符串学习

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

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

    栈的优点:

    1、栈的存取速度快,差不多仅次于位于cpu内的寄存器;

    2、数据可共享。

    缺点:

    1、存在栈中的数据大小与生存期必须是确定的,所以缺乏灵活性。

    堆的优点:

    1、可动态分配内存大小,生存期也不必事先告诉编译器;

    2、java的垃圾回收会自动的回收不再使用的数据。

    缺点:

    1、由于在运行时动态分配内存,会导致存取速度变慢。

    由于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对象,而不是向原有对象追加内容。

  • 相关阅读:
    2021 3 11 结队博客
    第一周 2021.03.07
    2021 3 5 知识点总结
    2021 3 3 每日总结
    2021 3 2 新学期的第一篇博客
    十天冲刺09
    二阶段之四
    安卓开发之实现手机验证码登录
    安卓布局(三)
    安卓布局(二)
  • 原文地址:https://www.cnblogs.com/zhi-hao/p/3949686.html
Copyright © 2011-2022 走看看