Java如何隐式创建对象?例如String类的情况。

4

我不明白隐式创建对象的方式。

例如:

String s = "implicit instantiation";

我可以创建一个能够隐式创建对象的自定义类吗?

3
简而言之:你做不到。 - user6073886
2
String是一个特殊的对象,它围绕着一些语法糖 - 字符串字面量、连接运算符和能够在switch语句中使用的能力。只有字符串具有这种能力(数组也有“字面量”)。 - RealSkeptic
3个回答

3
不,字符串的实例化是由编译器隐式处理的。只有String和Array类具有此属性。
String greeting = "Hello world!";
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };

自动装箱允许您隐式地实例化原始包装器类型的对象,但这也是编译器处理的特殊情况。您不能创建具有此功能的自定义类。

Boolean b = false;
Integer i = 0;
Double pi = 3.1416;

3
我们不能执行 Integer i = 5 这样的语句吗? - dumbPotato21
@Shashwat 哦,是的,请让我添加。 - Bill the Lizard

2

很遗憾,你不能这样做!

与C或C ++相反,在Java语言中您无法重载任何运算符,因此无法像下面这样做些什么

Foo myFoo = 1

对于字符串类:

String s = "implicit instantiation"

这是开发人员使用的糖语法,幕后编译器正在执行“脏”工作,类似于以下操作(请记住字符串池):

String s = new String("implicit instantiation")

同样适用于其他类型,如数组或数字的包装器...

0

对于每个对象实例,您需要一个构造函数,它是一种特殊的方法,用于构造和初始化方法。例如:

String s;  // Is not initialized and it's nos constructed.

那么如何在Java中构造一个新对象呢?使用new运算符非常简单,你只需要创建一个新对象即可!

s = new String("qwe"); // New object constructed

但是这里有一些让很多新手感到困惑的事情。为什么我可以这样做:

String s= "asdfasd;" 

因为在Java中,String是一个特殊的情况,你不需要像所有的原始变量那样添加一个new运算符作为类。例如:

Integer i = 3; 
Double d = 3.3d;

等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接