专业的编程技术博客社区

网站首页 > 博客文章 正文

Kotlin中的变量和属性和java的区别

baijin 2024-09-06 14:52:55 博客文章 6 ℃ 0 评论

首先大家先记住Kotlin官网的一句话:万物皆对象。

1.初始化

这个万物皆对象和java还是有很大的不同。在Kotlin里面,你定义的byte,String,int都是作为对象存在的,直接看代码吧。

我们先定义一个数字num,

int num=Int

Log.d("num=",""+num)

如果是Java的话,肯定是打印num=0,但是在Kotlin中默认都是Object类型,打印如下:

num=: kotlin.jvm.internal.IntCompanionObject@5a1cd3f

但是别担心,Kotlin还是可以根据你写的字面值,默认给他一个合适的类型的。

1 val i=12//An Int
1 val iHex = 0x0f // An Int from hexadecimal literal
3 val l=3L//A Long
4 val d=3.5//A Double
5 val f=3.5F//A Floatzhe

2.类型转换

java中是有隐式转换的,但是Kotlin必须指定要转换的类型才可。

比如我们定义一个 var i:Int 8 现在想要把它转为double,java中你可以直接写 double dnum=i,但是在kotlin中会报错的,要这样写

val d=i.toDouble()

而且,Char字符是不能直接用做数字来加减的,比如,var c:Char='C', var i=c.toInt()这样得到的才是一个整数,大家来猜测下面这段代码打印什么

var num :Char='C'

var sum=num+2

Log.d("sm=", sum+"")

结果是D。

3.| 和 &简单的唯一运算

大家肯定习惯了 var result=FLAG1|FLAG2或者 var result=FLAG1&FLAG2这种写法了,不好意思,你可能需要一点小小的改变了,Kotlin用文字 or和and 替换了 |和&

// Java

2 int bitwiseOr = FLAG1 | FLAG2;

3 int bitwiseAnd = FLAG1 & FLAG2;

emmm ,这点爸爸不满意,希望后续版本会更正

所以你现在看到的是下面这种的

//Kotlin

val bitwiseOr = FLAG1 or FLAG2

val bitwiseAnd = FLAG1 and FLAG2

4:被加强的String

之所以说被加强,是因为,字符串可以用到某些数组的语法,这个感觉很方便,

比如 var str="abcdefghig" ,str[2]的值就是c,

而且Iterable 可以用在String上,虽然听起来并没什么卵用,但是,有胜于无?

var str="abcdefghig"

for(c in str){

print(c)

}

5:变量和属性

kotlin中是根据var(可变的)和val(不可变)两类。这点和java中的final几乎是没什么区别的,比如我们可以把很多类属性定义为val (final),这样即成了线程安全的变量,因为每个线程都是拿到的同一个副本

如果你已经厌倦了java的set和get的写法,在我看来造成了很大的代码冗余,kotilin终于开始重视了这个问题,你不在需要定义set或者get。kotlin已经有了默认的get和set,而且你可以自自定义自己的get和set方法。

class Person {
 var name: String = ""
 get() = field.toUpperCase()
 set(value) {
 field = "名字是" + value
 }
}
var p = Person()
p.name = "david"
Log.d(TAG, p.name)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表