Java 爪哇:为什么;字符newChar=';c'&引用;如果角色是包装类,是否工作?为什么没有';你不需要构造器吗?
这些对我来说都很好: 例1: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的构造函数的一个映像 它甚至说它已经被弃用了,不应该这样访
Character newCharacter = 'c';
例2:
Character newCharacterOther = new Character('c');
但是有什么区别呢?
在第一个示例中,Character类如何知道在不需要构造函数的情况下将其值设置为“c”
它是否在幕后使用工厂方法?有人能给我解释一下编译器是如何知道该做什么的吗
我提供了java.lang中Character.class的构造函数的一个映像
它甚至说它已经被弃用了,不应该这样访问它,但我还是有点困惑
如上所述:
分配上下文允许使用以下内容之一:
- 装箱转换(§5.1.7)
- 从类型char到类型char
- 如果
是char类型的值,则装箱转换将p
转换为类和类型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');”但我还是有点不知所措。。。