文档章节

java基础---->String类

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 1340
阅读 1
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

String

 匿名对象

new  Person("张三",30).tell() ;

由于匿名对象没有对应的栈内存所指向,所以使用一次之后就等待被垃圾回收了。

1String在使用中有两种实例化的方法

一种是采用直接赋值(将字符串赋String的对象),

String str = "Hello" ;    //定义一个字符串

第二种方法是通过构造方法完成实例化的操作,

String str = new String("Hello");  //定义一个字符串

一个字符串就是一个String的匿名对象

区别:

第一种 String str = "Hello" ;按照之前的理解,现在肯定是将一个字符串的堆空间的地址给str,所以图形如下:

   此时的代码中,只在堆内存中开辟了一块空间,但是如果现在是第二种方式:

  String str = new String("Hello") ;使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中有一块将成为垃圾。

  除了内存空间的少之外,如果使用了直接赋值现在还有另外一种好处,就是如果以后如果再声明了与之一样的字符串的话,则不会再重新开辟新的内存空间

public class StringDemo {

      public static void main(String  args[]){

           String str1 =  "hello" ;

           String str2 =  "hello" ;

           String str3 =  "hello" ;

           System.out.println("str1  == str2 --> " + (str1==str2)) ;    //  true

           System.out.println("str1  == str3 --> " + (str1==str3)) ;    //  true

           System.out.println("str2  == str3 --> " + (str2==str3)) ;    //  true

      }

};

此时返回的结果都是true,所以很明显,以上的三个String的对象都同时指向同一个堆内存空间的“hello”字符串,那么如果使用的是构造方法赋值的话,根本不可能实现此效果。

       之所以内容会相等,是因为在JAVA底层中存在了一个字符串的对象池,每次的内容都会从池中取出,如果内容已经存在了,则使用已经存在的,如果不存在,则会生成一个新的,放入池中,属于共享设计模式

       由于这种原因,只要是使用String类的话,永远都要采用直接赋值的方式完成。

2、字符串的比较

只要是字符串的比较操作就统一都使用equals()方法完成。

两种比较的区别:==equals()

      · ==:用于数值比较,比较的是两个字符串的地址值

      · equals():用于内容的比较,比较两个字符串的内容是否相等

3、字符串的内容一旦声明则不可改变

       一个字符串肯定是保存在堆内存之中的,所以一旦一个字符串声明之后,则无法改变。

public class StringDemo08 {

         public static void main(String args[]){

                   String str = "hello" ;

                   str = str + " world" ;

                   str += " !!!" ;

                   System.out.println(str) ;

         }

};

通过内存图可以发现一点,每一个字符串的内容原本并没有发生任何的改变,改变的是只一个字符串的内存地址的指向(断开旧连接,指向新连接),而且操作完成之后会发现有很多的垃圾产生,所以,以后对于频繁修改字符串的代码应该尽可能的回避,使用stringBuffer代替。

4String类的相关操作

字符串与字符数组 

No.

方法名称

类型

描述

1

public String(char[] value)

构造

将一个字符数组全部变为字符串

2

public String(char[]  value,int offset,int count)

构造

将一个字符数组的指定范围的内容变为字符串

3

public char[] toCharArray()

普通

将字符串变为字符数组

4

public char charAt(int  index)

普通

返回指定位置的字符

5

public int length()

普通

求出字符串的长度

 字符串与字节数组:

No.

方法名称

类型

描述

1

public String(byte[] bytes)

普通

将字节数组变为字符串

2

public String(byte[]  bytes,int offset,int length)

普通

将指定范围的字节数组变为字符串

3

public byte[] getBytes()

普通

将字符串变为字节数组

字符串比较

1

public boolean  equalsIgnoreCase(String anotherString)

普通

忽略大小写的比较

字符串截取

1

public String substring(int  beginIndex)

普通

从指定位置截取到末尾

2

public String substring(int  beginIndex,int endIndex)

普通

截取指定范围的内容

判断字符是否存在

1

public int indexOf(String  str)

普通

从头开始判断,如果找到则返回位置,找不到返回-1

2

public int indexOf(String  str,int fromIndex)

普通

从指定位置开始查找,如果找到则返回位置,找不到返回-1

3

public boolean contains(String s)

普通

直接判断是否存在

字符串拆分

1

Public String[] split(String regex)

普通

按照指定字符串拆分

在进行字符串拆分的时候,如果发现有某些字符串无法拆分,则使用转义。

String str ="192.168.1.3" ;

String s[] =str.split("\\.") ;

字符串替换

1

public String replaceAll(String regex,String  replacement)

普通

全部替换

2

public String replaceFirst(String regex,String  replacement)

普通

替换第一个满足的内容

其他操作

No.

方法名称

类型

描述

1

public String toLowerCase()

普通

转小写

2

public String toUpperCase()

普通

转大写

3

public String trim()

普通

去掉左右空格

4

public boolean startsWith(String prefix)

普通

判断是否以指定的字符串开头

5

public boolean endsWith(String suffix)

普通

判断是否以指定的字符串

 

小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.7K
8
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6.2K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
718
1
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.9K
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-08-15

最后更新时间: 2020-08-15 04:01 Welders set off Beirut blast while securing explosives - (maritime-executive.com) 焊工在固定炸药的同时引爆了贝鲁特爆炸 得分:215 | 评论:209 Factor......

FalconChen
今天
24
0
OSChina 周六乱弹 —— 老椅小猫秋乡梦 梦里石台堆小鱼

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @小小编辑 :《MOM》- 蜡笔小心 《MOM》- 蜡笔小心 手机党少年们想听歌,请使劲儿戳(这里) @狄工 :腾讯又在裁员了,35岁以上清退,抖音看到...

小小编辑
今天
71
1
构建高性能队列,你不得不知道的底层知识!

前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列...

彤哥读源码
今天
17
0
Anaconda下安装keras和tensorflow

Anaconda下安装keras和tensorflow 一、下载并安装Anaconda: Anaconda下载 安装步骤: 如果是多用户操作系统选择All Users,单用户选择Just Me 选择合适的安装路径 然后勾选这个,自动配置环境...

Atlantis-Brook
今天
15
0
滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

桔妹导读:滴滴ElasticSearch平台承接了公司内部所有使用ElasticSearch的业务,包括核心搜索、RDS从库、日志检索、安全数据分析、指标数据分析等等。平台规模达到了3000+节点,5PB 的数据存储...

滴滴技术
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部