java - 下面的程序中c1和c2有什么区别,两者的声明相同吗?

标签 java wrapper

我对 c1 和 c2 感到困惑。都是对象吗?

class demo
{
    public static void main(String args[])
    {
        char c='w';
        Character c1=c;
        Character c2=new Character(c);
        System.out.println(c1);
        System.out.println(c2);
     }
}

最佳答案

是的,它们都是对象,请检查自动装箱。

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

在这种情况下,编译器会自动转换字符 c1=c;

Character c1 = Character.valueOf(c)

编辑回答评论:

它们不是相同的对象(相同的哈希码),但它们具有相同的值。

如果您检查Character类中的equals方法,您会发现它覆盖了默认的Object类equals,因此当它们的内部值相同时,相等性为真

public boolean equals(Object obj) {
    if (obj instanceof Character) {
        return value == ((Character)obj).charValue();
    }
    return false;
}

关于java - 下面的程序中c1和c2有什么区别,两者的声明相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504863/

相关文章:

html - 帖子用完了

用于冗余库的 C# .NET 包装器程序集开发

C# 包装器类和来自 C++ 的 dllimport

java - 使用其中的方法传递参数。 java

java - @RequestMapping 不映射 URL

java - 如何在 Java 中使用 XSLT 将 XML 转换为 HTML

java - MySQL 读取性能非常慢

java - 循环StringBuilder内存泄漏

scala - Scala 中隐式对象包装器的开销

objective-c - 用于 Google 文档的 iOS Objective-C 包装器