JAVA&Kotlin比较
kotlin 100%兼容java;kotlin规避了java的大部分坑;kotlin提供了更多高效语法
1. 基本类型
java的基础类型
//整型
byte,short,int,long,Byte,Short,Integer,Long
//浮点型
float,double,Float,Double
//布尔型
boolean,Boolean
//字符型
char,Character
//字符串
String
//原生类型数组
int[] long[] byte[] 等等
kotlin的基础类型
//整型
Byte,Short,Int,Long
//浮点型
Float,Double
//布尔型
Boolean
//字符型
String
//原生类型数组
intArray longArray byteArray 等等
总结:kotlin收敛了基础类型数量,不在区分包装类型和非包装类型,kotlin的Int相当于java的int,其它类型依次类推。在kotlin中要使用java的Integer类型怎么办?Int? 就是 java的Integer。Int? 在kotlin中,表示类型可空。
2. 类型声明及结束符号
java
int value=0;
String content="";
kotlin
val value:Int = 0
val content = ""
var isTest = false
总结:kotlin类型声明 使用val或var开头,变量名在前,类型在后,同时可以省略类型定义(在编译时,基于值进行类型推断确定类型) val 声明相当于java的 final 关键字。在java中每一个语句结束后要用分号结尾,kotlin则不需要
3. 相等比较
java 相等比较
String a ="test1";
String b ="test1";
//字符使用equals比交相等
a.equals(b)
int v1 =1;
int v2 =2;
//数字非包装类型比较
v1 == v2
Integer vv1 = 100;
Integer vv2 = 100;
//包装类型比较 需要先判断null ,再转换成非包装类型比较,否则容易出现错误
vv1.intValue() == vv2.inValue()
//以下这种情况,在java一不小心就会导致BUG
Integer vv1 = 9999;
Integer vv2 = 9999;
vv1 == vv2;//结果 false
Integer vv1 = 1;
Integer vv2 = 1;
vv1 == vv2;//结果 true
kotlin 相等比较
val a = "abc"
val b ="abc"
a == b
val v1 =1
val v2 =2
v1 == v2
总结:kotlin简化了相等的比较,无论是字符串还是数字或其它基础类型相等比较,都使用 == 号来实现,比java好,并且kotlin支持运算重载,可以自己实现==比较的逻辑。
4. Null判断
java
//java null判断,示例获得取 name值
TestData testData = new TestData();
testData.basic.rule.name
//在java 获取name值,不报空指针异常
String name ="";
if(testData.basic!=null && testData.basic.rule!=null){
name = testData.basic.rule.name;
}
else{
name ="default";
}
kotlin
val testData = TestData();
//kotlin 中null判断非常简单,不需要if ,?语法相当于if
val name = testData.basic?.rule?.name ?: "default"
总结:kotlin 采用了?号语法来进行判null操作,比javat简化不少。上面示例中kotlin一句话的语法与java多行语法是等价的。?:的意思是:如果?:左边的计算结果为null 则返回?:右边的值(示例:"default")做为默认值。
5.类型转换
java
//转字符串
int idInt = 5;
String idString = String.valueOf(idInt);
Integer idInteger = 5;
String idString = idInteger.toString();
//字符串转数字
Integer i = Integer.valueOf("5");
int i = Integer.valueOf("5").intValue();
//类转换
Employee employee = new Employee();
User u =(User)new employee;
kotlin
//转字符串
val idInt:Int =5
val idString = idInt.toString();
//字符串转数字
val idString ="5"
val idInt:Int = idString.toInt()
//类转换
val employee = Employee()
val u = employee as User
总结:java的字符串和基础类型互转,方式不统一,不够流畅。kotlin 提供的互转方式简单、统一都以toXXX()方法实现。kotlin 提供了 as 关键字进行类型转换
6.单例类
java没有提供单例类的语法,在kotlin中 用object 关键字可以自动实现一个单例类
object SingleClass{
fun goto(){
}
}
//使用单例类
SingleClass.goto()