java基础-字符串String

今天要介绍的知识点为String,也叫字符串。这是个应用的比较广泛并且充满神奇色彩的知识点。为什么说神奇呢?因为它涉及了好些个看起来高深莫测的概念。并且,这个知识点其实已经属于java中引用类型的知识点了,当然,前面我们介绍的数组也是。。。但是呢,现在还不是对引用数据类型进行解析的时候,在当数组和字符串有了初步的了解之后,我们就将以这两个知识点为入门砖,帮助大家快速了解什么叫引用数据类型,因为引用数据类型包含的面比较广,更涉及了未来要介绍的一些知识点,因此,是需要确保能够熟练掌握的。不过,在学习之前,先让大家接触一下,免得介绍的时候会觉得难以理解。所以,今天先介绍我们的主角–String类型(注意S是大写的)

什么叫做String类型呢?实际上,它的表现形式你肯定见过,如果你看过前面关于数组的介绍的话,那么接下来的解释你可能就很清楚了,请看:
String = char[]
什么意思呢?没错,所谓String,本质就是一个char型的数组,因为char[]类型在实际编程上使用比较多,为了描述上的方便,有人将其封装成一个叫String的东西,这个东西叫什么呢?为了不让你现在感到迷茫,先卖个瓜(关)子,你只需要知道,String本质上就是一组char[]数组就可以了。
创建String并赋值的方式:既然我们说了,String = char[] 。那么我们创建的String自然也和char[]有关。请看:
这里写图片描述
看到这里,可能有人就不开心了。说:MD我为了写一个hello,为什么还要写那么多行代码!!!不急,这个只是原则上的赋值方法,目的是为了告诉你一个很重要的结论,什么结论呢?就是上面的String=chat[]。。。那么接下来,为了不然人直接关掉页面砸电脑,我们来看一下简化版的String使用方式,请看:
这里写图片描述
怎么样,看到这个,心理好受多了吧。这个就是String的常用的声明变量以及赋值的方式。所以,从此以后,最后就不要在你的代码里出现char[]数组这个东西了。不然的话可能会被人误会不知道什么叫Stirng哦,当然,需求需要的时候不算哈~

神奇的String我们前面就说了,String是个很神奇的东西,而现在,我们就来看看他神奇之处:

String一旦赋值,那么它的值就不可以被改变,可以说,只要当系统没有在内存中回收这个变量的话,那么他就会一直在内存中存在,随时等待着被调用。那是不是说,一旦我们声明了一个变量s,并且给它赋值了hello之后,s就一辈子只能是hello了呢?一个例子告诉你:
这里写图片描述
WTF!!!不是说不可以被改变的吗!怎么就给变了!!哈哈,这里就要说明一下,上面说的String一旦赋值,那么它的值就不可以被改变,说的不是明面上的String变量值,而是隐藏在计算机后面的大boss–内存中的值。什么意思呢?就是说,其实我们每给一个String变量赋值,计算机就会在内存中创建出一个值,以供我们程序的调用。这个值呢,除非被系统干掉,不然的话,都不会改变。但是呢,当String变量被重新赋值了之后,系统自然也会再一次在内存中创建出一个不会改变的值,并且把这个值指向了我们的变量。是不是觉得烧脑?没关系,我们这样理解,String变量s是一个皇帝,有一天,他看上了一个很好看的女人,叫做hello,于是,他把这个女人抢,哦,是娶回了皇宫。编号就叫001号贵妃。从此呢,这个001号贵妃就独得皇上恩宠,好不风光。但是呢?好景不长,又有一次,皇帝s又看上了一个好看的女人,叫做world!,于是呢,他就把她也待回了宫中,编号叫做002.从此,001号贵妃就被打入冷宫,002号贵妃独得皇上恩宠了。但是,这个001号贵妃只是被打入冷宫,可并没有被人道毁灭呀。于是,偶尔有一段时间,皇上想起了这个001号贵妃,其实就是觉得002号贵妃没意思了,想换口味,于是,大袖一挥:“叫001号贵妃过来见我!”所以这个时候呢,001号贵妃,就是这个hello,就被s给引用了。大家或许会疑问,为什么无端端给个001,002呢?这里涉及的是第二个似乎高深莫测的概念,叫做哈希值(hashcode),在计算机内存中,为了方便对变量进行引用,一般在对变量赋值的同时,会给变量随机分配一个内存地址,这个内存地址,就叫哈希值。我们在检验皇帝s怎么调用妃子的时候,就是查看这个哈希值,就好像太监看到皇帝翻了001号妃子的牌子,就知道皇帝今晚要宠幸001号贵妃一样。
且看:
这里写图片描述
你看,这里很明显就发现一个问题了吧,当s处于引用hello状态的时候,他们的hashcode的值是一致的,这就验证了我们上面说的是对的。当s重新引用之前引用过得数值时,调用的就是前面系统在内存中创建那个值。而当我们引用了新的变量时,系统才会再创建另一个新的变量值。而这里也包含了一个新的概念,叫做字面值,总的来说,就是:第一次使用一个字面值时,在“字符串常量池”中新分配内存区创建字符串对象;再次使用相同的字面值时,直接访问“常量池”中存在的对象而不会新建。那么,这个字符串常量池又是什么鬼呢?其实它就是我们说的那个冷宫。负责回收使用过的Stirng变量。当然,关于这个常量池的内容,对于基础学习来说,无需了解太多,否则会吃不透,容易造成概念上的混乱,反而不利于进一步的学习。因此,当你已经能够进行有简单的程序开发基础之后,再来思考这个问题。如此,也有利于找工作。当然,关于这个问题,我们以后也会进一步阐述。

那么,接着上一个梗,既然说String的值不能改变,那么如果我想在原基础上拓展String的值的话,那又该怎么办呢?接下来介绍一个更好玩的东西,叫做字符串连接符。而你一定也见过了,不信?翻看前面的代码,你会发现里面有一句:
System.out.printfln("s宠幸的贵妃号码:"+s.hashcode());

在这里,你会发现有个“+”号在s.hashcode()以及字符串“s宠幸的贵妃号码: ”中间,并且s.hashcode()方法返回的还是一个数值型的数。那么,问题来了,这是怎么一回事呢?

其实说白了,+号就是我们的字符串连接符,它的一个作用是把相邻的任何数据拼成一段字符串,纳尼?那么强悍?使得,不论你是数值型,字符型,还是布尔型的数值,只要用它和一个字符串关联上了,就会变成Stirng类型的数据。比如:
这里写图片描述
你看,5原本为int型的数据,在后面加了一个空字符串“”之后,整个数据类型都变成String类型了。这么强悍的功能,可以赶得上某国的变性手术了呢。而你会发现,+号原本还有的是数值加法的作用,那么,什么时候代表加法,什么时候代表连接符呢?其实这个不需要纠结,要使+号称为连接符需要一个条件,就是和字符串进行拼接。所以,你可以根据实际情况灵活使用。该是啥就是啥,看程序员想它是啥而已。

那么,关于String的简单介绍也到此结束,下面是整理的一些关于使用String类型的方法:
【1】charAt(int index)
–> 获取指定位置字符

【2】toUpperCase()
–>变成大写

【3】toLowerCase()
–>变小写

【4】length()
–>获得字符串长度

【5】compareTo(String anotherString)
–>与另一字符串按编码表顺序比较大小
当前字符串大,返回正数
当前字符串小,返回负数
大小相同,返回0

【6】compareToIgnoreCase(String str)
–>忽略大小写,与另一字符串按编码表顺序比较大小(同【5】)

【7】startsWith(String s)
–>判断是否以指定的字符串开头

【8】endsWith(String suffix)
–>判断是否以指定的子结尾

【9】equals(Object anObject)
–>比较字符串内容是否定相同,返回的是布尔值

【10】equalsIgnoreCase(String anotherString)
–>忽略大小写,比较字符串内容是否相同.同上【9】

【11】indexOf(String s)
–>获得参数字符串的位置

【12】indexOf(String s, int fromIndex)
–>从指定位置向后寻找,获得指定子串的位置,不存在,返回 -1

【13】lastIndexOf(String s)
–>从后向前寻找子串的位置

【14】replace(char oldChar, char newChar)
–>将指定的字符替换为新的字符

【15】substring(int a)
–>打印从 a 位置开始直到结束的全部字符

【16】substring(int a, int b)
–>获得 [a, b) 位置范围的子串

【17】trim()
–>去除两端空白字符

【18】getBytes()
–>将 unicode 转为默认编码格式的字节数组

【19】getBytes(字符编码)
–>将 unicode 转为指定编码格式的字节数组

【20】String.valueOf(数据)
–>将任何数据转为字符串

这些方法不需要死记硬背,只需要知道大概有哪些就行了,以后在写程序中引用多了,自然就熟悉了的。

结语:至此,android系列之java基础部分到此结束。下一部分将以java为例讲解面向对象技术,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值