Kotlin学习笔记--String比较和Map
来源:互联网 发布:怎么用ps做淘宝店招 编辑:程序博客网 时间:2024/05/16 05:09
最近在学习kotlin,遇到一些细节上的知识点,作为学习笔记整理一下
1、String的比较
先来看看Java(Android)的
String s1=new String("aaa"); String s2=new String("aaa"); if(s1==s2){ Log.e("chen","s1==s2"); }else{ Log.e("chen","s1!=s2"); } if(s1.equals(s2)){ Log.e("chen","s1.equals(s2)"); }else{ Log.e("chen","---s1.equals(s2)"); } String s3="bbb"; String s4="bbb"; if(s3==s4){ Log.e("chen","s3==s4"); }else{ Log.e("chen","s3!=s4"); } if(s3.equals(s4)){ Log.e("chen","s3.equals(s4)"); }else{ Log.e("chen","---s3.equals(s4)"); }
对应日志是:
11-09 11:55:44.079 27781-27781/com.demo.androdidemo E/chen: s1!=s211-09 11:55:44.080 27781-27781/com.demo.androdidemo E/chen: s1.equals(s2)11-09 11:55:44.080 27781-27781/com.demo.androdidemo E/chen: s3==s411-09 11:55:44.080 27781-27781/com.demo.androdidemo E/chen: s3.equals(s4)
在Java中,String的 == 是对比数据的地址,equals是笔记的值。java中有个常量池,所有使用过的字符串都会被扔进去,当这个字符串再次被使用的时候就不会是new一个新的,而是取池里的。
现在,我们再看看kotlin的
var s1="aaa" var s2="aaa" println(s1==s2) println("----") println(s1.equals(s2)) println("----") println( TextUtils.equals(s1,s2))
对应日志是:
11-09 09:47:21.337 31819-31819/com.kotlin.demo I/System.out: true 11-09 09:47:21.337 31819-31819/com.kotlin.demo I/System.out: ---- 11-09 09:47:21.337 31819-31819/com.kotlin.demo I/System.out: true 11-09 09:47:21.337 31819-31819/com.kotlin.demo I/System.out: ---- 11-09 09:47:21.337 31819-31819/com.kotlin.demo I/System.out: true
从日志可以看出来, == 和equals的结果是相等的
这里说一个equals的重载方法,可以忽略大小写
代码如下:
var s1 = "ABC" var s2 = "abc" println(s1 == s2) println("----") //true,忽略大小写 println(s1.equals(s2,true)) println("----") //false,不忽略大小写 println(s1.equals(s2,false))
对应日志:
11-09 09:52:22.904 867-867/com.kotlin.demo I/System.out: false 11-09 09:52:22.904 867-867/com.kotlin.demo I/System.out: ---- 11-09 09:52:22.912 867-867/com.kotlin.demo I/System.out: true 11-09 09:52:22.912 867-867/com.kotlin.demo I/System.out: ---- 11-09 09:52:22.912 867-867/com.kotlin.demo I/System.out: false
2、map
var map_1=TreeMap<Int,String>() map_1[1]="111" map_1[2]="222" Log.e("=map_1=","map_1.size is ${map_1.size}") Log.e("=chen=","map_1[1] is ${map_1[1]}") Log.e("=chen=","map_1[1] is ${map_1[2]}") var map_2=TreeMap<String,String>() map_2["1"]="111" map_2["2"]="222" Log.e("=map_2=","map_2.size is ${map_2.size}") Log.e("=chen=","""map_2[1] is ${map_2["1"]}""") Log.e("=chen=","""map_2[1] is ${map_2["2"]}""")
对应日志:
11-09 12:10:24.436 30130-30130/com.kotlin.demo E/=map_1=: map_1.size is 211-09 12:10:24.436 30130-30130/com.kotlin.demo E/=chen=: map_1[1] is 11111-09 12:10:24.436 30130-30130/com.kotlin.demo E/=chen=: map_1[1] is 22211-09 12:10:24.436 30130-30130/com.kotlin.demo E/=map_2=: map_2.size is 211-09 12:10:24.436 30130-30130/com.kotlin.demo E/=chen=: map_2[1] is 11111-09 12:10:24.436 30130-30130/com.kotlin.demo E/=chen=: map_2[1] is 222
没问题。也容易理解。了解kotlin的,应该知道。它还有个Any类型。那么,再试试这个类型
var map=TreeMap<Any,String>() map[1]="111" map[2]="222" Log.e("=map=","map.size is ${map.size}") Log.e("=chen=","map[1] is ${map[1]}") Log.e("=chen=","map[1] is ${map[2]}")
11-09 12:12:43.376 30921-30921/com.kotlin.demo E/=map=: map.size is 211-09 12:12:43.376 30921-30921/com.kotlin.demo E/=chen=: map[1] is 11111-09 12:12:43.376 30921-30921/com.kotlin.demo E/=chen=: map[1] is 222
日志结果也对,但是,Any不是只能指向一种类型,而是可以指向任意类型的“任意类型”
改一下上面的代码:
var map=TreeMap<Any,String>() map[1]="111" map["2"]="222" Log.e("=map=","map.size is ${map.size}") Log.e("=chen=","map[1] is ${map[1]}") Log.e("=chen=","""map[1] is ${map["2"]}""")
写完以后,没有提示任何错误。现在,直接运行
日志提示
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
错误的行数指向
map["2"]="222"
Int不能转换成String。请注意这个上面的一行是 map[1]。1是Int,“2”是String
结论:
1、在使用Any的时候,如果map的key都是同一种类型,是没问题的。但是,如果出现了多种类型。会把后面的作为标准去比对前面的。如果前面的不能转换,就报错。
如上:1 在 “2”前面。执行到“2”的时候,发现了新类型String,就去回头看前面的类型,发现上面的是Int类型的1,不能转换成String,就报错。
2、这个写法应该没人会这么写吧。无意中发现,总结一下!!!
阅读全文
0 0
- Kotlin学习笔记--String比较和Map
- Kotlin 学习笔记(三) 类和继承
- MIPS学习笔记(1)-字符串(string)比较
- Kotlin学习笔记
- Kotlin 学习笔记-01
- Kotlin学习笔记
- kotlin学习笔记
- Kotlin : 学习笔记一
- Kotlin学习笔记
- Kotlin学习笔记
- Kotlin学习笔记-大纲
- kotlin 学习笔记
- kotlin学习笔记
- kotlin学习笔记1
- kotlin学习笔记2
- kotlin学习笔记
- kotlin学习笔记3
- kotlin学习笔记
- 机器学习 特征标准化
- Fastjson介绍;示例。取消循环引用,时间格式设置
- 简析在React Native中如何适配iPhoneX
- Java 8 之 lambda 表达式简单使用入门实例代码
- 1. jQuery ajax开发基于xml(了解) 1.1. XStream介绍
- Kotlin学习笔记--String比较和Map
- 关于XStream相关的常用方法;设置别名;忽略属性;设置xml字段属性
- 基于c++的运算符重载(一、复数非友元+友元)
- Text file busy(文本文件忙)
- 要想使用XStream的注解,必须开启注解扫描.
- 【Android源码系列】Service启动源码解析
- ros kinetic版编译error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
- 、 Ajax跨域问题 1. 跨域介绍 1.1. 什么是跨域; 跨域解决方案;jQuery解决跨域操作
- Educational Codeforces Round 31 C. Bertown Subway dfs