Java 中的 CharSequence VS String? CharSequence= 接口 = 具体实现String扭曲的历史
在 Android 中编程时,大多数文本值都应在 .CharSequence
为什么?有什么好处,过度使用的主要影响是什么?CharSequence
String
使用它们以及从一个区别转换到另一个时,主要区别是什么,以及预期的问题是什么?
在 Android 中编程时,大多数文本值都应在 .CharSequence
为什么?有什么好处,过度使用的主要影响是什么?CharSequence
String
使用它们以及从一个区别转换到另一个时,主要区别是什么,以及预期的问题是什么?
CharSequence
= 接口 String
CharSequence
是一个接口。String
就是这样一个类,是 的具体实现。CharSequence
你说:
从一个转换到另一个
无法从 进行转换。String
String
CharSequence
CharSequence::toString
。如果 碰巧是 ,则该方法返回对其自身对象的引用。CharSequence
String
CharSequence
String
换句话说,每个都是一个,但不是每个都是一个。String
CharSequence
CharSequence
String
在Android中编程时,大多数文本值都期望在CharSequence中。
为什么?有什么好处,使用CharSequence而不是String的主要影响是什么?
通常,编程到接口比编程到具体类更好。这产生了灵活性,因此我们可以在特定接口的具体实现之间切换,而不会破坏其他代码。
在开发供各种程序员在各种情况下使用的API时,请编写代码以提供并采用最通用的接口。这使调用程序员可以自由地使用该接口的各种实现,无论哪种实现最适合其特定上下文。
例如,看看Java Collections Framework。如果您的 API 提供或采用对象的有序集合,请将您的方法声明为 using 而不是 、 或 的任何其他第三方实现。List
ArrayList
LinkedList
List
当编写一个快速而肮脏的小方法,仅由代码在一个特定位置使用时,而不是编写要在多个位置使用的API,您不必费心使用更通用的接口而不是特定的具体类。但即便如此,使用最通用的界面确实会受到伤害。
使用它们时,主要区别是什么,以及预期的问题是什么,
String
CharSequence
该对象可能表示大量文本,因此具有内存含义。或者可能是许多单独跟踪的文本块,当您调用时需要拼接在一起,因此存在性能问题。该实现甚至可能从远程服务中检索文本,因此具有延迟影响。CharSequence
toString
并从一个转换到另一个?
您通常不会来回转换。A 是 .如果您的方法声明它需要 a,则调用程序员可能会传递一个对象,或者可能会传递其他内容,例如 a 或 。方法的代码将简单地使用传递的任何内容,调用任何方法。String
CharSequence
CharSequence
String
StringBuffer
StringBuilder
CharSequence
最接近转换的是,如果您的代码收到一个,并且您知道您需要一个.也许您正在与编写到类而不是写入接口的旧代码进行交互。或者,您的代码可能会密集地处理文本,例如重复循环或以其他方式进行分析。在这种情况下,您希望仅对任何可能的性能造成一次影响,因此请预先调用。然后继续你的工作,使用你知道的完全在记忆中的一段文本。CharSequence
String
String
CharSequence
toString
请注意对已接受的答案所做的评论。该接口被改造到现有的类结构上,因此有一些重要的微妙之处( & )。请注意在类/接口上标记的各种版本的Java(1,2,4和5) - 多年来发生了相当多的改动。理想情况下,从一开始就已经存在,但这就是生活。CharSequence
equals()
hashCode()
CharSequence
下面的类图可以帮助您了解Java 7/8中字符串类型的大局。我不确定所有这些是否都存在于Android中,但整体上下文可能仍然对您有用。