String在Java中是一个类类型(非主类型),是一个不可被继承的final类,而且字符串对象是一个不可变对象。声明的String对象应该被分配到堆中,声明的变量名应该持有的是String对象的引用。

运行期计算得到的字符串会得到一个新的字符串。tag="hel"+tag;

这种现象是Java为了效率而赋予String的特殊性。字符串是不可变的,字符串被分配了空间和初始值后值就不可变化。一旦变化,就会放弃原有的对象而分配新的空间给变化后的字符串。频繁地赋新值,会给程序运行效率带来极大影响。

不推荐使用==来比较非主类型的对象值。因为它通常不会得到期望的结果,可以说是不正确的。因为==符号比较的是变量的值,而变量的值不会是对象,而是对象的首地址,所以==是无法比较对象的。

但是String有时候使用==能够得到正确的结果,那是因为Java为了提高这个常用类型的效率和利用率,讲一些可以重复使用的字符串常量放到一个池中,仅可能地重用。

1.字符串池

当定义一个name=“hello”后,Java会先在字符串池中寻找是否已经存在“hello”这个字符串,如果没有,则建立字符串“hello”对象,然后变量name指向这个地址。

而后定义一个新的字符串如果是编译时就能确定的话,它会自动指向字符串池中的一个已存在的对象,但是如果是运行期计算得出的,它将会分配新的空间给对象。计算得来的字符串不知想池中的任何对象,但是可以使用intern方法使其指向字符串池中的对象。同时指向池中同一个字符串对象,使用“==”来比较肯定会返回true。池中String的hashCode是唯一的。

attentions:(1)使用new操作创建的字符串对象不在池中。

(2)计算得来的字符串不在池中。

(3)只有编译期确定的对象直接被放入池中或指向池中对象。

(4)使用==操作符号比较字符串时,必须值和hashCode值同时相等时,两个字符串才相等。

(5)intern只会在字符串池中寻找匹配的对象,没有找到的话,自动将自己放入池内。

2.equals和hashCode

在重写equals时遵循以下约定:自反性、对称性、传递型、一致性

在重写hashCode时遵循以下约定:(1)相等对象,hashCode一定相等;(2)不等对象,hashCode不一定不相等;(3)hashCode相等,不一定对象相等;(4)hashCode不相等,对象一定不相等。

StringBuffer 和 StringBuilder中常用的函数:

append:向缓冲区末尾添加字符串。

delete:删除指定位置的字符串。

replace:替换指定字符串。

inset:在指定位置插入字符串。

indexOf:指定的字符串所在的位置索引。

lastIndexOf:最后一个匹配指定的字符串的位置索引。

reverse:反转整个字符串。

对于频繁变化的字符串,不要使用String,而要使用StringBuffer或者StringBuilder,在单线程程序中使用StringBuilder,多线程环境中建议使用StringBuffer。

3.格式化输出

%[-][有效位数][.精度]转换字符

Java学习之字符串类的更多相关文章

  1. Java学习笔记--字符串和文件IO

    1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1. ...

  2. Java学习:File类

    Java学习:File类 File类的概述 重点:记住这三个单词 绝对路径和相对路径 File类的构造方法 File类判断功能的方法 File类创建删除功能的方法 File类获取(文件夹)目录和文件夹 ...

  3. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  4. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  5. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  6. Java学习:Properties类

    Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...

  7. Java学习之字符串的创建

    转自:http://lavasoft.blog.51cto.com/62575/80034/ Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时 ...

  8. Java学习_Java核心类

    字符串和编码 字符串在String内部是通过一个char[]数组表示的,因此,可以按下面的写法: String s2 = new String(new char[] {'H', 'e', 'l', ' ...

  9. java学习-关于字符串String

    有必要总结记录一下java的学习,否则,永远只是记忆碎片化和always google(费时) 刚好,小伙伴给了一份自己做的review,在学习的过程中,update一下自己的见解和学习内容: 关于S ...

随机推荐

  1. LeetCode Reverse Words in a String 将串中的字翻转

    class Solution { public: void reverseWords(string &s) { string end="",tem="" ...

  2. 调试工具DEBUG的使用(8086)

    有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器.标志.存储单元的内容呢?可不可以修改和控制它们呢? DEBUG这个有力工具,就可以深入到机器内 ...

  3. Jquery LigerUI

    http://www.ligerui.com/index.aspx http://api.ligerui.com/ 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下 ...

  4. C#继承机制 访问与隐藏基类成员

    (1) 访问基类成员 通过base 关键字访问基类的成员:   调用基类上已被其他方法重写的方法.  指定创建派生类实例时应调用的基类构造函数.  基类访问只能在构造函数.实例方法或实例属性访问器中进 ...

  5. 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析

    ID:相同就从上而下,不同数字越大越优先

  6. 垂直居中一个img

    { display:table-cell; text-align:center; vertical-align:middle; }

  7. Duizi and Shunzi HDU - 6188 (贪心)2017 广西ACM/ICPC

    Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. mysql基础,数据表的类型

  9. C++ lambda 表达式 简介

    自己根据对lambda表达式的理解,做了一套ppt简单介绍

  10. 【Linux】linux 机器之间 zssh, rz, sz互相传输

    服务器端安装lrzsz: sudo  yum install lrzsz 本地客户端安装lrzsz: brew install lrzsz 本地客户端安装zssh: brew install zssh ...