Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇:为什么;字符newChar=';c'&引用;如果角色是包装类,是否工作?为什么没有';你不需要构造器吗?_Java_Constructor_Factory_Java.lang.class_Java.lang - Fatal编程技术网

Java 爪哇:为什么;字符newChar=';c'&引用;如果角色是包装类,是否工作?为什么没有';你不需要构造器吗?

Java 爪哇:为什么;字符newChar=';c'&引用;如果角色是包装类,是否工作?为什么没有';你不需要构造器吗?,java,constructor,factory,java.lang.class,java.lang,Java,Constructor,Factory,Java.lang.class,Java.lang,这些对我来说都很好: 例1: Character newCharacter = 'c'; 例2: Character newCharacterOther = new Character('c'); 但是有什么区别呢? 在第一个示例中,Character类如何知道在不需要构造函数的情况下将其值设置为“c” 它是否在幕后使用工厂方法?有人能给我解释一下编译器是如何知道该做什么的吗 我提供了java.lang中Character.class的构造函数的一个映像 它甚至说它已经被弃用了,不应该这样访

这些对我来说都很好:

例1:

Character newCharacter = 'c';
例2:

Character newCharacterOther = new Character('c');
但是有什么区别呢?

在第一个示例中,Character类如何知道在不需要构造函数的情况下将其值设置为“c”

它是否在幕后使用工厂方法?有人能给我解释一下编译器是如何知道该做什么的吗

我提供了java.lang中Character.class的构造函数的一个映像

它甚至说它已经被弃用了,不应该这样访问它,但我还是有点困惑

如上所述:

分配上下文允许使用以下内容之一:

  • 装箱转换(§5.1.7)
指:

具体而言,以下九种转换称为装箱转换:

  • 从类型char到类型char
在运行时,装箱转换按如下方式进行:

  • 如果
    p
    是char类型的值,则装箱转换将
    p
    转换为类和类型
    Character
    的引用
    r
    ,这样
    r.charValue()==p
因此,您的线路相当于:

Character newCharacter = Character.valueOf('c');
事实上,如果您反编译您的类,您将看到调用的正是这个类


但是有什么区别呢

newanything
保证创建
Anything
的新实例(或异常失败)。因此,
newcharacter('c')==newcharacter('c')
始终为false

另一方面,
Character.valueOf('c')==Character.valueOf('c')
可能为true,因为不需要方法调用来返回新实例。事实上,规范保证您不会在这两个调用中获得新实例


这允许您重用现有实例,避免不必要的分配,从而节省内存。

查找自动装箱。同样对于您的特定问题,这可能与以下相关:噢,哇!!谢谢!!!:)我在想编译器会做一些类似的事情:“Character newCharacter=Character.valueOf('c');”但我还是有点不知所措。。。