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. word2013标题编号变成黑框

    在使用word2013时,之前正常的标题编号有部分变成了黑框 解决方法: 1.将光标移动到标题中黑框右侧 2.按动键盘上的左方向键,直到黑框变成灰色 3.同时按键盘 Ctrl+Shift+S键,弹出“ ...

  2. 新版graylog2安装过程

    Graylog是一个开源的 log 收容器,背后的储存是搭配 mongodb,而搜寻引擎则由 elasticsearch 提供.以前版本主要有两个部分集合而成 server 与 web interfa ...

  3. memcached for .net on windows

    memcached for windowshttp://www.cnblogs.com/dudu/archive/2009/07/19/1526407.htmlhttp://www.cnblogs.c ...

  4. noip模拟赛#24

    这套题我只会写第二题...我... T1:给出一个含有向边和无向边的混合图,如何确定无向边的方向使得图中不存在环.保证有解.多解情况输出任意解. =>我往最大流的残量网络的方向去想了...因为混 ...

  5. hdu1213-How Many Tables---基础并查集

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 题目大意: 今天是Ignatius的生日,他邀请了许多朋友.现在是吃晚饭的时间,Ignatiu ...

  6. python_57_高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. def add(a,b,f): return f(a)+f(b) res=add(-3,- ...

  7. 漫谈 Clustering (番外篇): Expectation Maximization

    Expectation Maximization (EM) 是一种以迭代的方式来解决一类特殊最大似然 (Maximum Likelihood) 问题的方法,这类问题通常是无法直接求得最优解,但是如果引 ...

  8. WPF 修改数据后更新UI

    ObservableCollection<T> 只有项添加或删除才会更新UI 要想属性发生变动后立刻更新到UI,必须继承 INotifyPropertyChanged 接口,示例如下 pu ...

  9. Debug与Release版本的区别详解

    原文链接 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug和Release的行为完全颠 ...

  10. CUDA开发:了解设备属性

    原文链接 今天介绍一下CUDA设备的相关属性,只有熟悉了硬件是相关属性,是怎么工作的,就能写出更适合硬件工作的代码.cudaDeviceProp这个结构体记录了设备的相关属性. struct cuda ...