Kotlin 语法

字符串比较

复制代码
var str1 = "chaychan"
var str2 = "chaychan"
println(str1 == str2)

比较两个字符串,如果两个字符串的内容一致,在Java中使用 str1 == str2 时,是比较两个字符串的地址值,很清楚两个字符串的地址不一样,返回false,但是在kotlin中,则不是如此,比较的只是字符串的内容,而=相当于Java中的,用来比较引用对象, 上述代码返回的是true。

equal函数

  1. equals(str:String)

方法中的参数是与之对比的字符串,默认不忽略大小写,即大小写敏感,比如:

复制代码
var str1 = "chaychan"
var str2 = "ChayChan"
println(str1.equals(str2))

打印结果为false,因为不忽略大小写的话,两个字符串内容对比是不一致的,所以返回false。

  1. equals(str:String,ignoreCase:Boolean)

方法中有两个参数,第一个参数是与之对比的字符串,第二个参数是布尔类型的值,是否忽略大小写,如:

复制代码
var str1 = "chaychan"
var str2 = "ChayChan"
println(str1.equals(str2,true))

返回结果为true。

源码优化分析

源码

1.Lateinit

在View声明阶段,都会需要使用lateinit来延迟声明变量。

复制代码
class TaskActivity : AppCompatActivity(){
  private val CURRENT_FILTERING_KEY = "CURRENT_FILTERING_KEY";
  private lateinit var drawerLayout : DrawerLayout
  private lateinit var tasksPresenter:TasksPresenter
}

kotlin中延迟声明还包括lazy的方式

复制代码
val name:String by lazy {"cangwang"}
lateinit var drawLayout:drawLayout

区别在于:

  1. .lazy{}只能用再val类型,lateinit只能用在var类型
  2. .lateinit不能用在可空的属性上和java的基本类型上lateinit var name:String会报错
  3. .lateinit可以在任何位置初始化并且可以初始化多次,因为其衔接var变量.而lazy在第一次被调用时就被初始化,其衔接的是val常量,想要被改变只能重新定义
2.findViewById

Api26前:

复制代码
@Override
public View findViewById(@IdRes int id){
  return getDelegate().findViewById(id);
}

Api26之后

复制代码
@SuppressWarnings("TypeParameterUnusedInFormals")
@Override
public <T extends View> T indViewById(@IdRes int id){
  return getDelegate().findViewById(id);
}
五个kotlin Standard.kt里面的函数:apply,with,let,run,also
  1. apply作用

    setSupportActionBar(findViewById(R.id.toolbar))
    supportActionBar?.apply{
    setDisplayHomeAsUpEnabled(true)
    setDisplayShowHomeEnabled(true)
    }

在函数内可以通过this指代该对象,返回值为该对象自己

  1. with函数

将某对象作为函数的参数,在函数内可以通过this指代该对象.返回值为函数块的最后一行或指定return表达式

复制代码
override fun getView(i:Int,view:View?,viewGroup:ViewGroup):View{
  val rowView=Vview?:LayoutInflater.from(viewGroup.context).inflate(R.layout.task_item,viewGroup,false)
  val task = getItem(i)
  with(rowView.findViewById<TextView>(R.id.title)){
    text = task.titleForList
  }
  with(rowView.findViewById<CheckBox>(R.id.complete)){
    isChecked=task.isCompleted
    rowView.setBackgroundDrawable(...)
    setOnClickListener{

    }
  }
}
3.lat函数
复制代码
private fun showMessage(message:String){
  view?.let{
    Snackbar.make(it,message,Snackbar.LENGTH_LONG).show()
  }
}

将对象作为函数参数,在函数块内可以通过it指代该对象.返回值为函数块的最后一行或指定return表达式

4. run函数

其有两种表达式:

  • 第一种无参数输入
  • 第二种会将对象本身this给函数调用
    返回值为函数块最后一行,或者指定return表达式

Object

单例对象是使用Object申明

Kotlin没有静态属性和方法,需要使用单例对象来实现类似的功能.

data

相当于java中定义的数据bean类,其可以直接在属性之后编写get和set方法

@JvmOverloads

相关推荐
神仙别闹16 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读16 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
北京自在科技18 小时前
谷歌 Find Hub 迎来新版本更新
android·安卓
2601_9669496519 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717620 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
RAN114267600821 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .1 天前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988721 天前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒1 天前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)1 天前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm