String 是 Android 或 Java 中的原语还是对象?

Posted

技术标签:

【中文标题】String 是 Android 或 Java 中的原语还是对象?【英文标题】:Is String a primitive or an Object in Android or Java? 【发布时间】:2013-01-06 13:33:17 【问题描述】:

android API http://developer.android.com/guide/topics/data/data-storage.html#pref

上面写着:

Shared Preference 允许您保存和检索持久键值 成对的原始数据类型。您可以使用 SharedPreferences 来保存 任何原始数据:布尔值、浮点数、整数、长整数和字符串。

String 是原始数据类型还是对象?

【问题讨论】:

字符串是在 Java 中得到特殊处理的对象。它不是原语,但它对语言和一般编程来说足够重要,可以在某些方面被视为一个原语。 原语是:int,'float', 'double', 'bool', @Perception:感谢您的回复,但根据 android API,它如何存储在共享首选项中(共享首选项仅存储原始数据)。 @Krishna - 正如下面的答案所提到的,Android SharedPreferences API 允许您存储原语、字符串,甚至字符串集。 他们只是松散地使用术语“原始”,因为字符串是由原始数据类型 char 组成的对象。 【参考方案1】:

Java编程语言而言,

原始类型由语言预定义并由保留关键字命名。

除了上面列出的八种原始数据类型之外,Java 编程语言还通过java.lang.String 类提供对字符串的特殊支持。

——来自The Java™ Tutorials - Primitive Data Types

因此,在Java 书籍中,它既不是关键字也不是原语。 SharedPreferences 可能仍将其称为原语之一,但这不是来自 Java 的书,可能是因为它是我们遇到的 int、float、char 等一组基本类型之一。

【讨论】:

【参考方案2】:

直接来自 JLS:

A string literal is a reference to an instance of class String

所以不,它不是原语。

【讨论】:

直接来自 Java 圣经【参考方案3】:

在使用 Android SharedPreferences 时,您将使用 getString 和 putString(带有 SharedPreferences.Editor),在这种情况下,它们都是 Java 字符串对象。 Java 文档解释说,从技术上讲,String 不是原语,但因为它通常在语法上被视为一种原语并且它很普遍,所以有时可以将其称为原语。 Android 可能使用这个定义(见http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

【讨论】:

感谢您的回答,根据原始数据类型“除了上面列出的八种原始数据类型之外,Java 编程语言还通过 java.lang.String 类对字符串提供了特殊支持。 "对吗? 正如它所说,截至目前,Java 中只有八种原始类型。【参考方案4】:

String 是一个对象,在 android 或 java 中它根本不是原始类型。 您可以使用字符串存储在 SharedPreferences 中。

【讨论】:

【参考方案5】:

字符串是 String 类 (java.lang.String) 的对象。如您所知,在其他编程语言中,字符串不是通过语言提供的,用户必须使用字符数组来表示字符串。这就是为什么 String 不是原始数据类型,而是无数属性(int length、char[position] 等)的原因。

由于 String 的重要性,Java 的创建者允许由 String message = Ḧello World; 简单地创建 String 没有错,许多人以这种方式创建(实例化)String 类的对象......但是你可以也说...char[] arr = 'a','b','c'; String myString = new String(arr);String myString = ¨abc¨; 相同这是因为如前所述,字符串只是一系列字符。在 String 类内部,有一个构造函数(跟在 new 关键字后面并与类名匹配的东西),它接受一个字符数组作为参数。

简答:String 是一个 不是原始数据类型,在创建 String 对象时,您正在实例化 String 类

【讨论】:

【参考方案6】:

String 是一个对象,尽管它可以在 SharedPreferences 中使用。字符串也存储为键值对

【讨论】:

以上是关于String 是 Android 或 Java 中的原语还是对象?的主要内容,如果未能解决你的问题,请参考以下文章

java Android - Geocoder任务从String或Latitude / Longitude加载android.address

java Android - Geocoder任务从String或Latitude / Longitude加载android.address

java Android - Geocoder任务从String或Latitude / Longitude加载android.address

java Android - Geocoder任务从String或Latitude / Longitude加载android.address

java Android - Geocoder任务从String或Latitude / Longitude加载android.address

java Android - Geocoder任务从String或Latitude / Longitude加载android.address