zoukankan      html  css  js  c++  java
  • 折腾了一晚上的“equals”和“==”

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

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

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

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

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

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

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

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

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

      

  • 相关阅读:
    JavaScript数组方法大全
    梁凤波工作周记3月10号
    JS解析联动JSON数据
    angularjs select 获取选中的值
    外部变量获取Ajax后台返回的参数值(success)
    ionic $ionicModal使用方法
    angularjs select ng-options延迟更新(联动)
    ionic使用iframe范围外部站点
    angularjs select 三级联动
    Ionic start 创建项目报错
  • 原文地址:https://www.cnblogs.com/999625696397qq/p/10006136.html
Copyright © 2011-2022 走看看