java String类

日期:2017-10-02

今天10月2日,昨天去千灯古镇游玩了一天,今天打算复习一下String类

地点:上海市杨浦区政本路东方家园

闲话少说,让我们开启探索String类之旅吧!!!

1.1.0、String类的两种对象实例化方式

String之所以特殊,原因在于:两种不同的对象实例化方式。

方式一:直接赋值字符串的形式为String类对象实例化

方式二:采用String类的构造方法为String类的对象实例化,String类的构造方法为:

public String(String str)

实例:

1.1.1.字符串的比较

若有两个int型变量,如果想知道二者是否相等,应该使用“==”进行验证。

那么换成String该如何?

==的确是完成了相等的判断,,但是最终判断的是两个对象(现在的对象是字符串)是否相等,属于数值判断---------判断的是两个对象的内存地址数值,并没有判断内容,要想完成字符串内容的判断,则必须使用String类操作方法

public boolean equals(String str)

使用equals()方法比较的不再是内存地址的数值,比较两个字符串的内容。

常见面试题:

请解释String类中的“==”和equals()的区别

“==”比较的是两个字符串的内存地址是否相同,属于数值比较

equals比较的是两个字符串的内容,属于内容比较。

1.1.2.字符串与字符串常量的判断

开发中可能遇到的问题:字符串常量调用equals方法,可以避免空指针异常。

1.1.3.String类的两种实例化方式的区别

1.分析直接赋值的情况:

开辟了一块栈内存,一块堆内存

内存分析图

关于直接赋值操作中字符串都相同的原因:

在String类进行设计时采用一种称为:共享设计模式的概念,在每一个运行的JVM底层存在一个字符串的对象池(Object Pool),如果用户采用了直接赋值的的方式,会将字符串的内容放入池中,以供其他继续使用直接赋值方式的String对象使用,如果新声明的字符串不在池中,则会开辟一个新的,继续放到池中,以供下次使用。

共享设计模式:好比在家中准备的工具箱一样,如果有一天需要用到螺丝刀,发现家里没有,那么肯定要去买一把新的,使用完之后不可能丢掉,会将其放到工具箱以备下次继续使用,而这个工具箱中的工具肯定可以为家庭中的每个成员服务。

2.分析构造方法赋值的情况:

代码样例:

原因:每一个字符串都是一个String类的匿名对象,首先会在堆内存中开辟一块空间保存字符串“Hello”,而后又使用关键字new ,开辟了另一个堆内存空间,不过真正使用的是用关键字new 开辟的堆内存,而之前定义的字符串常量的堆内存空间将不会有任何的栈内存指向,其中有一块将成为垃圾。另外,使用构造方法实例化的String类对象内容不会保存在字符串对象池之中,即不能够进行共享数据操作。

观察入池问题:

使用构造方法实例化的String对象不会入池,所以使用构造方法实例化的String对象只能自己使用,

手工入池:

但在String类中为了方便操作提供了一种称为手工入池的方法:

public String intern();

这个方法表示:将开辟的字符串对象那个保存在对象池中,不需要从新开辟新的对象了。

面试题1:请解释String类的两种对象实例化方式的区别

直接赋值:只开辟一块堆内存空间,字符串的内容可以自动入池,以供下次使用

构造方法:开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,需要使用intern()方法手动入池

开发:使用直接赋值的方式

面试题2:代码String str=new String("Hello");创建了几个String类的实例化?

创建了两个实例化对象,一个是String类的匿名对象“Hello”,另一个是使用关键字new实例化的String的类对象。

1.1.4.字符串的内容一旦声明则不可改变

内存分析图:

java Doc文档:

String类常用的方法(重点):实际开发中String类使用广泛,讲过的方法尽可能背下来(方法的名称、返回值类型、参数的类型及个数、方法的作用)

之前介绍的2个方法:equals()    intern()   

String类和字符之间的转换:


例子1.字符串和字符数组转换,完成一个小写字符串变为大写字符串的操作,小写字母与大写字母差了32。

判断一个字符串是否由数字组成?

实现方法传入字符串,返回字符串中出现的次数为n的单词,如果多个单词出现次数为n,拼接成一个字符串用空格分隔。已知元字符串仅以空格分隔。

例如传入参数:"good good study day day up" 和2

返回:"good day"

1.1.4.字符串与字节:

public String (byte[] bytes) 构造   说明:将全部的字节数组变为字符串

public String(byte[] bytes,int offset,int length) 构造  将部分的字节数组变为字符串

public byte[] getBytes() 普通    将字符串变为字节数组

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException

普通  字符串转码操作

技术穿越:一般情况下在程序中如果想要操作字节数组只有两种情况

情况一:需要进行编码的转换时

情况二:数据要进行传输IO操作或者网络编程要使用到

1.1.4.字符串的比较

public boolean equals(String anObject) 普通 区分大小写的相等比较

public boolean equalsIgnoreCase(String anotherString) 普通 不区分大小写,比较是否相等。

public int CompareTo(String anotherString) 普通 比较两个字符串的大小

例子略

注意:读者要注意CompareTo()方法返回的类型int

实现输入一个字符串:打印图形

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • JAVA Doc public final class String extends Object impleme...
    风语安然阅读 1,032评论 0 3
  • 此刻的我,正和小青坐在咖啡馆,面对她的吐槽。 “这样的日子什么时候才是尽头?”小青幽幽的说着,眼神望着窗外,满是忧...
    巧笑_倩兮_阅读 340评论 0 0
  • 总觉得心脏的位置不应该在左侧,而在剑突,每次痛苦的时候,都是剑突在疼痛
    厌氧菌感染阅读 206评论 0 0