美文网首页
Java基础学习之String类

Java基础学习之String类

作者: TeapotLee | 来源:发表于2018-04-26 11:12 被阅读0次

String 是一个字符串类型的类,使用“ " ”定义的内容都是字符串,但是String本身毕竟是一个类,虽然这个类在使用上会有一些特殊,但是我们必须从类的角度与内存关系上来分析这个类的作用。

String的两种实例化方式

在之前使用过String,最早使用的时候是直接采用了“String 变量名 = "字符串";”语法完成的。这种形式称为直接赋值。

字符串的比较:

如果说现在有两个int型整数想要判断其是否相等,可以使用“==”符号完成

“==” 现在的确是进行了比较,但是比较的内容并不是字符串对象包含的内容,而是他们所在的内存地址的数值,所以“==”是属于数值比较 ,比较的是内存地址

而如果说现在要想去比较字符串内容的话,那么可以使用String里面定义的方法    :

        比较内容(与原始定义有一些差别) : public boolean equals(String str);

在以后的开发之中,只要是进行字符串的相等判断,千万不要使用“==”完成

    在字符串相等的判断中“==”与“equals()”的区别

        -->“==”是Java提供的关系运算符,主要的功能是进行数值相等判断的,如果用在String对象上表示的内存地址数值的比较

        -->“equals()”是由string提供的一个方法,此方法专门负责进行字符串内容的比较

字符串常量就是String的匿名对象

实际上任何语言都没有提供字符串这一概念,很多的语言里面都是使用了字符数组来描述的字符串的概念。在Java里面也没有字符串的概念,但是所有的开发里面都不可能离开字符串的应用,那么最终的结果是,Java自己创造了字符串。但是这个字符串依然不属于基本数据类型,它是将字符串作为了String类的匿名对象的形式存在的

匿名对象保存在堆内存里

那么所谓的直接赋值实际上相当于将一个匿名对象设置了一个名字而已,但是惟一的区别是,String类的匿名对象是由系统自动生成的,不用由用户自己直接创建

小小技巧:为了避免空指向异常的出现,可以将字符串写在前面调用方法

共享设计模式:

在JVM的底层实际上会存在有一个对象池(不一定只保存String对象),当代码之中使用了直接赋值的方式定义了一个String类对象时,会将此字符串对象所使用的匿名对象入池保存,而后如果后续还有String类对象也采用了直接赋值的方式,并设置了同样内容的时候,那么将不会开辟新的堆内存空间,而是使用已有的对象进行引用分配,从而继续使用。

2、采用构造方法实例化

构造方法如果要使用一定要用关键字new,一旦使用了关键字new就表示要开辟新的堆内存空间。

如果使用的是构造方法进行String类对象实例化的时候,那么最终的操作形式就变为了开辟两块堆内存空间,其中有一块堆内存空间将成为垃圾空间。

除了内存的浪费之外,如果使用了构造方法定义的String类对象,其内容不会保存在对象池之中因为是使用了关键词new开辟的新内存。如果现在希望开辟的新内存数据也可以进行对象池保存,那么可以使用String类定义的一个手工入池的方法:public String intern();

String类对象两种实例化的区别:

直接赋值(String str = "字符串"):只会开辟一块堆内存空间,并且会自动保存在对象池之中以供我们下次重复使用;

构造方法(String str = new String("字符串")):会开辟两块堆内存空间,其中有一块空间将成为垃圾,并且不会自动入池,但是用户可以使用intern()方法使其入池。

字符串常量一旦被定义则不可改变


总结:

String类的特点:

String类对象的相等判断使用equals()方法完成“==”实现的是地址数值的比较

字符串内容一旦声明则不可改变,String类对象内容的改变是依靠引用关系的变更实现的

String类有两种实例化方式,使用直接赋值可以不产生垃圾空间,并且可以自动入池,不要使用构造方法完成。

相关文章

  • java基础:String — 字符串常量池与intern(二)

    其他更多java基础文章:java基础学习(目录) 学习资料:String类API中文深入解析String#int...

  • Java基础学习之String类

    String 是一个字符串类型的类,使用“ " ”定义的内容都是字符串,但是String本身毕竟是一个类,虽然这个...

  • Java基础学习之——核心类String

    前言 无论在C++还是java中,字符串的使用频率都很高,在C++中,字符串封装为一个string类,需要#inc...

  • Java基础之常用API汇总

    Java基础之常用API汇总 String类: String类代表字符串,字符串本质就是一个字符数组.构造方法:1...

  • Java基础之常用API汇总

    Java基础之常用API汇总 String类: String类代表字符串,字符串本质就是一个字符数组.构造方法:1...

  • ##Java学习笔记之基础类库笔记

    Java学习笔记之基础类库笔记 Object 所有类,数组,枚举类的父类 Objects(Java7新增) 工具类...

  • java基础-String类

    String类基本特性 String类表示的字符串,String是不可变类,因此String对象一旦创建,它的包含...

  • Java基础:String类

    相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 概述 字符串是由多个...

  • Java基础String类

    String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。可以将字符...

  • JAVA基础:String类

    内部存储结构 以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组。 常用的几个...

网友评论

      本文标题:Java基础学习之String类

      本文链接:https://www.haomeiwen.com/subject/assplftx.html