val a = 10000//不显示声明类型不会封装新对象
val boxedA = a
val anotherBoxedA = a
println(boxedA === anotherBoxedA) // true
2288Kotlin 基本数据类型
val a: Int = 100
println(a === a) // true,值相等,对象地址相等
//经过了装箱,创建了两个不同的对象
val boxedA: Int? = a
val anotherBoxedA: Int? = a
//虽然经过了装箱,但是值是相等的,都是100
println(boxedA === anotherBoxedA) // true,值相等,128 之前对象地址一样
println(boxedA == anotherBoxedA) // true,值相等
import java.lang.Integer.parseInt
import java.util.*
fun main(args: Array<String>) {
// Greeter("me!").greet()
// 创建一个对象不用 new 关键字
println("请输入一个整数:")
val scannerX = Scanner(System.`in`)
val x = scannerX.next().toString()
println("请输入另一个整数:")
val scannerY = Scanner(System.`in`)
val y = scannerY.next().toString() //直接使用 x*y会导致错误
val s = parseInt(x)*parseInt(y)!!.toInt()
println("两数乘积为:" + s.toString())
}
2291Kotlin 基本数据类型
@刘义 的说法是对的,但不完整;@RomanLuo 的说法也对,但也只在 [-128, 127] 范围之外有效。
下面给一个完整的用例,包含了所有情况,供大家参考。
注意其中 Int 和 Int? ,127 和 128 之间的区别。
2290Kotlin 基本数据类型
RomanLuo 这个说法有误导性:
这里判断为地址相同不是因为有没有显示声明类型,而是类型都相同,都是数值类型,没有进行装箱操作。而案例中的类型是 Int? 可空类型,类型不同所以必须装箱,导致产生一个新对象。
2289Kotlin 基本数据类型
2288Kotlin 基本数据类型
这里我把 a 的值换成 100,这里应该跟 Java 中是一样的,在范围是 [-128, 127] 之间并不会创建新的对象,比较输出的都是 true,从 128 开始,比较的结果才为 false。
2287Kotlin 基础语法
输入两个数据进行相乘: