热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java基础复习用Demo去认识String类

前言:我们知道在开发中最常用的就是字符串了。往往在实际的项目开发中,字符串被用户当做数据传输和数据展示的常用类;本篇目的在于帮助大家简单的重新认识一下java中的String

前言:我们知道在开发中最常用的就是字符串了。往往在实际的项目开发中,字符串被用户当做数据传输和数据展示的常用类;

本篇目的在于帮助大家简单的重新认识一下 java 中的 String 类;

首先我们是知道String 它不是基本数据类型,所以去创建String 对象就需要 String类提供的类构造方法去实例化;  【携带常见面试题分析】

大家提前可预知:所有的字符串都是String类型的匿名对象;

第一步:分析String类对象的实例化过程

【面试题:请说明String类的两种实例化方法的区别?】

A:String 类对象的实例化

1》简单方法:直接赋值方法:String str = "ankermaker";// “ankermaker” 是 String 的匿名对象;

2》构造方法:String str = new String ("ankermaker");// “ankermaker” 同样是一String 的匿名对象;

实例化方法的区别莫过于对象创建和引用的不同,即从内存的角度来分析:

简单方法分析如下图:

 “ankermaker”是一个匿名类,即在堆中存在这个对象,这里的str 是栈中的一个对象存储是 这个匿名类对象的地址;

构造方法分析:

“ankermaker”是一个匿名类,即在堆中存在这个对象,但是我们知道 一旦出现new 的时候 就一定会在 堆中开辟性得内存;

如下图所示:

综上所述:我们就很容易这两种方法的区别就是:简单赋值在堆中只会创建一个对象,而使用构造器去是实例化结果就会在堆中产生一个内存垃圾;

第二步:分析String中常用的方法;

1》charAt

求字符串某一位置字符
public char charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。

1 String str = new String("abcd");
2 char ch = str.charAt(1);//ch = b

2》compareTo

字符串比较
1)public int compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
2)public int compareToIgnore(String anotherString)//与compareTo方法相似,但忽略大小写。
3)public boolean equals(Object anotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
4)public boolean equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写。

1 String str1 = new String("abc");
2 String str2 = new String("ABC");
3 int a = str1.compareTo(str2);//a 0
4 int b = str1.compareTo(str2);//b=0
5 boolean c = str1.equals(str2);//c=false
6 boolean d = str1.equalsIgnoreCase(str2);//d=true

3》concat

【面试题:请谈一谈 “+"和 concat 方法的区别】

字符串连接
public String concat(String str)//将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。

1 String str = "aa".concat("bb").concat("cc");

相当于String str = "aa"+"bb"+"cc";

这里大家可以自己去跑一下下面这两个使用“+“的运算;

1、String str = '12"+"13"+“”abcd“”;

2、String str2 = "12"+"abcd"+“”23“;

第一个 25abcd
第二个 12abcd13

跑完的结果查看

大家可以查看上面的结果,我相信大家就知道这两个方法的区别啦;

4》indexOf

字符串中单个字符查找
1)public int indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
2)public int indexOf(int ch/String str, int fromIndex)//改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。
3)public int lastIndexOf(int ch/String str)//该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。
4)public int lastIndexOf(int ch/String str, int fromIndex)//该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。

1 String str = "I am a good student";
2 int a = str.indexOf('a');//a = 2
3 int b = str.indexOf("good");//b = 7
4 int c = str.indexOf("w",2);//c = -1
5 int d = str.lastIndexOf("a");//d = 5
6 int e = str.lastIndexOf("a",3);//e = 2

5》字符串中字符的大小写转换

1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串

1 String str = new String("asDF");
2 String str1 = str.toLowerCase();//str1 = "asdf"
3 String str2 = str.toUpperCase();//str2 = "ASDF"

6》字符串中字符的替换

1)public String replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
2)public String replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
3)public String replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。

1 String str = "asdzxcasd";
2 String str1 = str.replace('a','g');//str1 = "gsdzxcgsd"
3 String str2 = str.replace("asd","fgh");//str2 = "fghzxcfgh"
4 String str3 = str.replaceFirst("asd","fgh");//str3 = "fghzxcasd"
5 String str4 = str.replaceAll("asd","fgh");//str4 = "fghzxcfgh"

7》split

String[] split(String str)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。

1 String str = "asd!qwe|zxc#";
2 String[] str1 = str.split("!|#");//str1[0] = "asd";str1[1] = "qwe";str1[2] = "zxc";

8》equals

【面试题:请谈一谈 “”==“” 与 equals 方法的区别 】

下面有两块代码:大家跑一下,然后结合上面的实例化分析我相信大家就可以的到它们的之间的区别了;

代码1:

string str1 = "yong";

string str2 = "yong"

system,out,println("str1" == "str2");

代码2:

string str1 = "yong";

string str2 = new String("yong")

system,out,println("str1" == "str2");

带着问题去测试代码:

第一块代码,上面输出的结果是 true;为什么呢?、

第二块代码,输出的结果却是 false;又是为什么呢?

问题3:如果 都换成 equals 方法结果又是如何呢?大家可以去问度娘,也可以自己的写个代码跑一下对比一下即可哦。

第一个问题:首先告诉大家的是String类的设计模式是共享模式---如果用户采用直接赋值的方法实例化一个字符串的话如同代码块1中的“String str1 = "yong" ;”,那么java 内部的内存管理机制就会在堆区中创建一个常量池(实际上是个数组),然后将这个“yong”存到这个常量池中,以至于在后面用户在创建第二个应用对象str2的时候,直接就会指向常量池中的“yong”,所以代码中的Str1 和 Str2 存的地址是一样的。
第二个问题:上面再谈到String的两种实例化方法的区别的时候我们就明白了,用构造方法去创建String 对象的时候在堆中存在两个内存,所以对应栈中的str1 、str2 有不同的指向地址;返回false;
所以 “==” 其实就是 判断栈中对象所存的地址值是否一样;

问题答案和总结
我们知道在String 在使用中,不仅仅是我列出的这几个常用的地方,所以太多的知识空白告诉我们,只有不断地去完善自己的知识体系才是我们使用它们的心应手的唯一途径。加油你我!
Good night ,Best wishes to you!

 

文章来源于https://www.cnblogs.com/Ankermaker/p/8186348.html


推荐阅读
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有