任何人都可以解释为什么在传递到函数之前和之后,Android资源ID的值(R.ID.Navigation_News)是不同的?
通过函数之前
fun showTabFragment() {
navigateWithStartDest(R.id.navigation_news) // R.id.navigation_news == -1000386
}
之后 fun navigateWithStartDest(resId:Int){
//resId == 2131362119
//resId != R.id.navigation_news - true
...
}
您可能会得到整数溢出。原因是您的整数太大了。
在计算机编程中,当算术操作试图创建一个超出范围内的数字值时,就会发生整数溢出,该值可以用给定数量的数字表示 - 要么大于最大值或最低最小代表值。
请参阅链接:https://en.wikipedia.org/wiki/integer_overflow
该解决方案不是在R.id
值上运行的,而仅作为资源传递。
可能由于Java内存模型而发生。用kotlin语言,所有原语都变成了对象。因此,在您的功能中,您不会收到确切的值,而是参考它。