作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在阅读 JavaSE 6 specs ,那我做了个测试,解开一些疑惑。
Two reference types are the same run-time type if:
- They are both class or both interface types, are defined by the same class loader, and have the same binary name (§13.1), in which case they are sometimes said to be the same run-time class or the same run-time interface.
- They are both array types, and their component types are the same run-time type (§10).
运行下面的代码...
public class Test {
public static void main(String[] args) {
String str = "" + new String(" ");
String[] strArr = {str};
String[] strArr2 = {str};
System.out.println("strArr == strArr2 : " + (strArr == strArr2));
}
}
...我期待以下输出:
strArr == strArr2 : true
但是当前的输出是:
strArr == strArr2 : false
我错过了什么?
最佳答案
仅仅因为它们是同一类型,并不意味着它们是同一对象。
当你做的时候
String[] strArr = {str};
String[] strArr2 = {str};
您正在创建两个包含相同内容的数组,但数组本身是两个独立的对象。
它们是同一类型(字符串数组)但它们不是同一对象(引用 X 和引用 Y)。当您说 strArr == strArr2
时,您是在问它们是否是同一个对象(或者实例,如果您更喜欢该术语)。
您引用的 JLS 与您所谈论的内容处于不同的层次,它只是说 String[]
和 String[]
是同一类型。
关于java - 当引用类型相同时 - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228593/
现在我正在尝试实现 flash programming specification对于 PIC32MX。我正在使用 PIC32MX512L 和 PIC32MX512H。 PIC32MX512L最终必须
我是一名优秀的程序员,十分优秀!