iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
1

昨日解答

=== 用來確立 兩個 變數是否引用同一物件

第一組


fun main (){

// 1
 var a = 0
// 2 
 var b = a
// 3 
 b = 1 
 

println(a)
println(b)

}

結果:

 
0
1

a 和 b 都是基本型態 , 傳遞給 a 這個變數 value 0 , 在 2 的地方 a 這個變數 把 value 0 傳遞給 b, 此時 b 會是 0, 接下來在 3 的地方 又把 1 傳給 b , 最後的結果 a 變數的值 為 0 , b 變數的值 為 1

基本型態基本上是 call by value , 不適用檢查是否物件相等

第二組

fun main (){

var sa = "abcd"
 
var sb =  sa 
 
println(sb===sa)
  
sb.replace("a","c")   
 
println(sb===sa)
 
println(sa)
println(sb)

}

結果:

true
true
abcd
abcd

昨天有說過 , 當要組合成新的字串 ,會從 String Pool , 找出 相符的 String 物件 , sb.replace("a","c") 會是另一個物件, 並非 原有的 String 物件轉變而來 。

這個物件並沒有任和變數指向他 , 他會是被冷落在一角的狀態 , 也並不會影響到sa 或 sb
所以最後 結果 sa 和 sb 是指向 同一個物件 "abcd" ,

第三組



fun main (){
//1
 var la = mutableListOf(1,2,3,4)
 //2
 var lb =  la
 
 println(lb===la)   
 //3
 lb.clear()
 
 println(lb===la)
 
println(la)
println(lb)

}

結果:

true
true
[]
[]

在 二的地方, lb 和 la 指向同一個 mutableList 物件 , 在 3 的地方, lb 把 這個共同指向 mutableList 物件 清空, 理所當然 , lb 和 la 打印出來的值都會是空的 。

第四組

data class Test (var id:Int, var name :String)

fun main (){
//1
 var ta = Test(0,"aaa")
//2
 var tb =  ta
 
 println(tb===ta)   
//3  
  tb.id = 1
 
 println(tb===ta)
 
println(ta)
println(tb)

}

結果:

true
true
Test(id=1, name=aaa)
Test(id=1, name=aaa)

其實這組和上面是一樣的道理 ,只不過在這裡 把類別 從 mutableList 換成 Test 類別,在 二的地方, tb 和 ta 指向同一個 Test 物件 , 在 3 的地方, tb 變數調用 Test 物件 的 id 變數 ,將 1 傳給這個變數 。 這個共同指向 Test 物件 他的參數 id value 變成了 1 , 理所當然 , tb 和 ta 打印出來的id 參數 value 都會是1


上一篇
[ Day 1 下 ] Kotlin 變數 val var / 基本型態 及 轉換 …
下一篇
[Day 2 下] Kotlin Function
系列文
Android 菜鳥村-開發基礎 30篇32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言