Kotlin学习笔记(一)—基础语法与Java全面PK,当上项目经理才知道

fun sum(a:Int,b:Int) = a + b1


对应Java代码:

```java
int sum(int a,int b){
    return a+b;
}123

​ 3.函数无返回值或者说返回值无意义:

fun sum(a:Int,b:Int):Unit{
    println("sum of $a and $b is ${a+b}")
}123

or

fun sum(a:Int,b:Int){
    println("sum of $a and $b is ${a+b}")
}123

对应Java代码:

void sum(int a,int b){
    System.out.println(String.format("sum of %d and %d is %d",a,b,a+b));

}1234

Tips:在字符串内 符 号 后 带 变 量 名 代 表 这 个 变 量 的 值 , 符号后带变量名代表这个变量的值, 符号后带{},代表{}里面表达式的值。Unit返回类型相当于Java里的void

​ 4.函数参数含数组参数:

fun printArray(vararg args:Int){
    for(arg in args){
        print("$arg ")
    }
}12345

or

fun printArray(args:Array<Int>){
    for(arg in args){
        print("$arg ")
    }
}12345

对应Java代码:

void printArray(Integer...args){
    for(Integer arg:args){
        System.out.println(arg+" ");
    }

}123456

2.定义常量和变量

​ 1.Kotlin常量相当于Java里对变量添加final,定义时复制后将不能改变其值:

 val a: Int = 1  // 直接定义时赋值
 val b = 2   // 在常量声明时可不指定类型
 val c: Int  // 定义时不赋值
 c = 3       // 在其他地方才赋值1234

注意:第三种方式定义常量时必须要制定类型,否则编译出错。
对应Java代码

final int a = 1;
final int b = 2;
final int c = 3;123

这里Kotlin和Java的区别就体现出来了,Java声明常量必须要给常量赋初值,必须指定常量的类型。而Kotlin可以不声明常量类型,并且可以延后给常量赋值,但需要声明常量类型。

3.注释

​ Kotlin的注释跟Java完全一样。

4.使用条件表达式

​ Kotlin使用条件表达式与Java的写法有出入,但效果没明显区别。

fun max(a:Int,b:Int):Int{
    return if(a>b) a else b
}123

or

fun max(a:Int,b:Int):=if(a>b) a else b1

对应的Java代码

int max(int a,int b){
    return a > b ? a : b;
}123

5.可空的参数或返回值

​ Kotlin对于可空的参数和返回值,在声明参数类型后加?符号,表示参数可空。

fun toInt(s:String):Int?{
    return s.toIntOrNull();
}123

对应Java代码

@Nullable Integer toInt(String s){
    return Integer.valueOf(s);
}123

注意:在Java代码中Integer.value()方法若参数不可转为整形会crash。

6.检查类型

​ Kotlin在检查类型写法也与Java不同。Kotlin用is代替了Java的Instanceof。此外,如果变量被检查符合某种类型,无需进行强制转换,系统将自动将变量转换为那个类型。例如:

fun getStringLength(obj:Any):Int?{
    if(obj is String){
    //系统自动将obj转换为String类型
        return obj.length
    } else
    //return obj.length  在此处使用obj.length将报错
        return null
}12345678

or

fun getStringLength(obj:Any):Int?{
    if(obj !is String){
        return null
        //return obj.length 在此处使用obj.length将报错
    } else
    //系统自动将obj转换为String类型
        return obj.length  
}12345678

对应的Java代码

@Nullable Integer getStringLength(Object obj){
    if(obj instanceof String){
        String s = (String)obj;
        return s.length;
    }else{
        return null;
    }
}12345678

7.遍历数组类型

​ Kotlin在遍历数组上与Java上也有区别,如下:

val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    println(item)
}1234

or

val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}1234

对应的Java代码

final String[] items = new String[]{"apple","banana","kiwi"};
for(String item:items){
    System.out.println(item);
}1234

or

final String[] items = new String[]{"apple","banana","kiwi"};
int size = items.size;
for(int i = 0;i<size;i++){
    System.out.printlin(String.format("item at %d is %s",i,items[i]));
}12345

8.while循环

​ Kotlin在用while循环与Java无任何区别。

9.范围检查

​ Kotlin相对于Java简化了数据范围检测的写法。如下:

1.检查数据是否在数值范围内
val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}12345

对应Java代码

final x = 10;
final y =9;
if(x>=1&&x<=y+1){
    System.out.println("fits in range");
}12345
2.检查数据是否在数值范围外
val list = listOf("a", "b", "c")

if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}
if (list.size !in list.indices) {
    println("list size is out of valid list indices range too")
}12345678

对应Java代码

 final Array<String> list = Arrays.asList("a","b","c");
 if(-1 < 0||-1 > list.size()-1){
    System.out.println("-1 is out of range");
 }
 if(list.size()<0||list.size()>list.size()-1){
    System.out.println("list size is out of valid list indices range too");
 }1234567

​ 通过上面的对比,Kotlin的代码效率就体现出来了。

3.遍历数值范围
for (x in 1..5) {
    print(x)
}123

对应的Java代码

for(int i=0;i<=5;i++){
    System.out.print(x+"");
}123
4.步进遍历数值范围
for (x in 1..10 step 2) {
    print(x)
}
println()
for (x in 9 downTo 0 step 3) {
    print(x)
}1234567

对应的Java代码

int x;
for(x = 1;x<=10;x+=2){
    System.out.print(x+"");
} 
System.out.print("\n");
for(x=9;x>=0;x-=3){
    System.out.print(x+"");
}12345678

​ 通过对比,Kotlin的代码简洁性又体现出来了。

10.when表达式

​ when表达式是Kotlin新增的用于多情况的取值判定。来见识一下他的威力:

fun describe(obj:Any):String = 
    when(obj){
        1 -> "One"
        "Hello" -> "Greeting"
        is Long -> "Long"
        !is String -> "isn't String"
        else -> "Unknown"
    }12345678

对应的Java代码:

String describe(Object obj){
    if(obj instanceof Integer && (int)obj == 1){
        return "One";
    }else if(obj instanceof String &&((String)obj).equal("Hello")){
        return "Greeting";
    }else if(obj instanceof Long){
        return "Long";
    }else if(!(obj instanceof String)){
        return "isn't String";
    }else{
        return "Unknown";
    }
}12345678910111213

​ 我已经是尽量简洁的用Java代码还原,但是由于Java代码需要各种判定类型,强制转换,简洁性终究还是被Kotlin完胜。此外,when还能这样操作:

val a = "bbb";
val b = 5;
when{
    a.equal("bbb") -> {
        print("a is bbb")
        print("a")
    }
    b == 5 -> print -> print("b == 5")
}123456789

​ 两种when的区别是前者是对()内的对象进行判定。后者是不指定对象。

11.集合操作

​ Kotlin对于集合的操作可谓是对Java代码的又一颠覆。对比一下:

1.判断对象是否在集合内
val fruits = setOf("apple","banana","orange")
if("apple" in fruits){
  println("apple is in fruits")
}1234

而Java代码

final Set fruits = new HashSet();
fruits.add("apple");
fruits.add("banana");
fruits.add("orange");


### 最后

> 由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

![](https://img-blog.csdnimg.cn/img_convert/536670449d83818b4dd6a3499f338731.png)

**小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》**

##### **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

"apple is in fruits")
}1234

而Java代码

final Set fruits = new HashSet();
fruits.add("apple");
fruits.add("banana");
fruits.add("orange");


### 最后

> 由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

[外链图片转存中...(img-eDHxpnc3-1631175045999)]

**小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》**

##### **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

![](https://img-blog.csdnimg.cn/img_convert/2bc22a0a1dd125e183f8a9ca0a141829.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值