当前位置: 首页 > 知识库问答 >
问题:

静态编程语言的const val num=1是什么类型?他们如何定义它?

梁丘权
2023-03-14

我主要使用IntDoubleStringChar。最近,我对节省内存产生了兴趣,我意识到即使是很小的字节数也会大得多,这会影响程序,甚至影响移动速度和电池寿命。(尤其是内存中的数据资源)

所以,当数据不需要存储大的数字时,我尝试使用ByteShort。例如,字节表示-128~127,缩写为-32768~32767

这是个好主意吗?

我的主要问题是我想知道Kotlin中const val的数据类型,因为它会自动定义数据类型。

const val THIS_IS_STRING = "HelloWorld"
const val THIS_IS_CHAR = 'C'
const val NUMBER_1 = -124
const val NUMBER_2 = 31000
const val NUMBER_3 = 1000000
const val NUMBER_4 = 1232188777777344444
const val NUMBER_5 = 29128812312732881231273712
const val NUMBER_6 = 0.423
const val NUMBER_7 = 0.2121222222441
const val NUMBER_8 = 0.813881281237123991827312324
const val NUMBER_9 = 0.5123090982307037412398190092340239423094803820432423423209823092342342348209384023984023480923840923840009930923094029848901

它们的数据类型是什么(数字)?

或者我应该这样定义以节省资源?还是我不需要?

const val MIN:Byte = -124
const val MID:Short = 31000
const val MAX:Int = 1000000
...
``

共有3个答案

赵雅懿
2023-03-14

Kotlin类型推断  -  在Kotlin中,大多数情况下,只要编译器能够推断,就不需要指定正在使用的对象的类型。

所以,我们只需要根据我们想要生成的变量类型来编写var或val,并且通常可以推断出类型。我们也可以显式地指定类型。例如,您定义val REQUEST_code=100。在幕后,REQUEST\u codeInt数据类型初始化,因为REQUEST\u code的值是Int类型,编译器推断REQUEST\u code也是Int类型。请注意,Kotlin是一种静态类型的语言。这意味着类型是在编译时解析的,永远不会更改。

尽管Kotlin使用类型推断(自动识别某些内容),这意味着我们在初始化变量时也可以选择指定数据类型,如下所示:

val REQUEST_CODE: Int = 100

两者在将其转换为字节码时的行为相同。

见鬼,如果我们使用隐式声明,Kotlin如何确定数字的数据类型?

好问题,Kotlin提供了一组表示数字的内置类型。对于整数,有四种不同大小的类型,因此有不同的值范围。

所有初始化为整数值不超过Int最大值的变量都具有推断的类型Int。如果初始值超过此值,则该类型为Long。要显式指定Long值,请将后缀L附加到该值。因此,每当您严格希望节省内存时,建议对数据类型(如Byte)使用显式类型声明

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1

参考

  • https://kotlinlang.org/docs/reference/basic-types.html
吴英武
2023-03-14

类型推断描述在https://kotlinlang.org/docs/reference/basic-types.html

基本上,当没有为范围为-231到231-1的数字指定时,默认类型是Int,高于此值的是Long。要显式指定Long值,请将后缀L附加到该值。因此,每当您严格希望节省内存时,建议为ByteLong使用显式类型声明

val one = 1                    // inferred as Int
val threeBillion = 3000000000  // inferred as Long
val oneL = 1L                  // explicitly specify Long type by appending with L
val oneLong: Long = 1L         // explicitly specify Long by type
val oneByte: Byte = 1          // explicitly specify Byte for saving memory

对于浮点数,默认类型为Double,您可以通过指定类型或追加f来切换到浮点。

val pi = 3.14               // Double
val piFloat: Float = 3.14   // explicitly specify Float by type
val e = 2.7182818284        // Double
val eFloat = 2.7182818284f  // explicitly specify Float by appending with f

字符和字符串本质上只有一种数据类型,因此默认情况下是CharString,无需显式更改。

通常建议指定类型以节省内存,因为它是恒定的,永远不会改变,所以保存是一个更好的选择,但这一切都取决于您。

仇正平
2023-03-14

这取决于您是想向kotlin还是self提供数据类型分配。如果通过提供资源类型保存值。您可以保存数据,也可以依赖kotlin。

但是如果你保存数据,我会建议你提供数据类型:

让我们举个例子:

fun main() {
    var b: Any = 124
    println(b)
    if(b is Float) {
        println("Float")
    }
    else if(b is Double) {
        println("Double")
    }else if(b is Byte){
        println("byte")
    }else if(b is Int){
        println("int")
    }else if(b is Short){
        println("short")
    }
}

它将以Int的形式提供输出。

所以我建议提供数据类型。

 类似资料:
  • 它与扩展函数有什么关系?为什么带有的是函数,而不是关键字? 这个主题似乎没有明确的留档,只有关于扩展的知识假设。

  • 我在我的一个项目中使用RxJava,我使用Android Studio插件将我的一个类转换为静态编程语言,并在maplambda(java中的Func1)之一中,中间体返回如下所示。 我不知道这意味着什么。

  • 我正在学习静态编程语言,我在函数方面有一些问题。我试图创建一个带有通用参数的函数接口。Java我会创建这样的东西: 然后我可以在其他地方像这样使用它(给定扩展: 你是怎么和Kotlin写这篇文章的? 我尝试的第一件事是使用如下类型别名: 但是,当我将绑定添加到type参数时,它停止了工作: 第二种方法是编写一个扩展函数类型的接口: 然而,现在我不知道如何用这个来实例化lambda函数。当我从中创建

  • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D

  • 这里已经阐明了和之间的区别。 但我的问题是,为什么我们要使用关键字?从生成的Java代码角度来看没有区别。 静态编程语言代码: 生成:

  • 有了这个数据模型... TestClass.kt 我的目标是反序列化以下json值: 我在这里看到了解决方案并尝试了这个,但是我的“反序列化”方法中的断点似乎永远不会命中。 选项Deserializer.java TestDeserialization.kt 建筑gradle(用于版本信息)