最近在仿写美团这个项目的时候,遇到了一点关于字符串比较的问题,这里记录一下,避免以后再犯。

  由于之前学c语言的时候,习惯性用“==”进行比较,初识Java,不知道有什么别的方法可以进行字符串比较,于是就将c语言中那一套直接搬过来,发现Android studio没有报错,并没有太在意,软件一运行,就发现不对了,我要比较的两个字符串明明是一样的,然而运行结果却出人意料,甚至比较之前用Toast显示一遍都发现字符串一模一样,上网一查才发现字符串比较有别的方法。

  首先要从Java的数据类型说起,Java中数据类型分为基本数据类型和引用数据类型,而字符串String是属于引用类型的,顾名思义,引用数据类型的变量在Java中储存的不是数据本身,而是一个地址值,这样一来,如果直接用“==”比较两个字符串的话,系统内部比较的是两个字符串的储存地址,而不是String数据本身,这样一来就造成了上述我所遇到的问题。

  解决这一问题首先需要知道:String本身是Java中的一个类,系统已经给我们定义好了。

  为了解决字符串比较的问题,Java设计人员在String类中为我们定义了一个equals方法,使用这个方法比较字符串,系统就会比较字符串数据本身,而不是字符串的储存地址。

  查资料的过程中还了解到一点关于字符串的拓展知识,这里也记录一下:

  字符串池:由于字符串在程序中十分常用,为了节省内存,重复利用相同字符串,专门为字符串开辟的一块储存空间。字符串池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。一般对象不存在这个字符串池中,并且创建的对象仅仅存在于方法的堆栈区。也就是说要看创建方式:

  1.凡是直接用引号进行赋值的,默认就在字符串池中;而且如果字符串池中已有相同的字符串,则字符串池中的内容不会再增加。

  2.凡是用new关键字创建的字符串,默认不在字符串池中。

  

最新文章

  1. 廖雪峰js教程笔记14 file文件操作
  2. JS 数字,金额 用逗号 隔开(数字格式化)
  3. cocoapods版本更新
  4. springmvc No mapping found for HTTP request with URI in Dispatc
  5. 【温故而知新-Javascript】使用canvas元素(第二部分)
  6. UVa12633 Super Rooks on Chessboard(容斥 + FFT)
  7. Happy Number - LeetCode
  8. 【巩固】CSS3的3D动画 ——3D旋转(1)
  9. [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务
  10. U3D刚体测试2(ForceMode,AddForce,RelativeAddForce)
  11. 手动的写一个structs
  12. MapControl Application 添加自定义的工具条
  13. Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启
  14. JMM以及并发三大特性介绍(包括解决方案)
  15. MySQL行转列、列转行
  16. pdf及word文档的读取 pyPDF2,docx
  17. 【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
  18. picasso 在魅族手机无法加载缩略图的bug
  19. mysql分类和事务回滚
  20. CentOS 7 安装 RabbitMQ 3.7

热门文章

  1. Mysql 错误 Connection is read-only 解决方式
  2. echarts多个数据添加多个纵坐标
  3. SpringBoot连接Redis服务出现DENIED Redis is running in protected mode because protected mode is enabled
  4. D - Romantic
  5. idea ------- 源码调试运行
  6. 4.加密与token(node+express)
  7. leetcode-0543 二叉树的直径
  8. qa问答机器人pysparnn问题的召回
  9. 关于json转义中文
  10. python学习18类4之静态类