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