【问题标题】:How java create objects implicitly? Like in case of String classjava如何隐式创建对象?就像在 String 类的情况下一样
【发布时间】:2017-04-12 14:14:04
【问题描述】:

我无法理解对象是如何隐式创建的。

例子:

String s = "implicit instantiation";

我可以创建自己的类,其对象可以隐式创建吗?

【问题讨论】:

  • 简而言之:你不能。
  • String 是一个特殊的对象,它周围有一些语法糖——字符串文字、连接运算符、在switch 情况下使用的能力。只有字符串有这种能力(数组也有“文字”)。

标签: java string objectinstantiation


【解决方案1】:

不,字符串实例化由编译器隐式处理。只有 String 和 Array 类有这个属性。

String greeting = "Hello world!";
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };

Autoboxing 允许您隐式实例化原始包装类型的对象,但这也是编译器处理的特殊情况。您无法使用此功能创建自己的类。

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

【讨论】:

  • 我们也不能Integer i = 5吗?
  • @Shashwat 哦,是的,让我补充一下。
【解决方案2】:

很遗憾,你做不到!

与 C 或 C++ 相反,您不能在 Java 语言中重载任何运算符,因此没有办法做类似的事情

Foo myFoo = 1

在字符串类的情况下:

String s = "implicit instantiation"

这对开发人员来说是糖类sintax,在幕后是编译器在做“肮脏”的工作并做一些类似的事情(记住有一个字符串池):

String s = new String("implicit instantiation")

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

【讨论】:

    【解决方案3】:

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

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

    那么如何在java中构造一个新对象呢?使用new operator 轻松创建一个新对象!

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

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

    String s= "asdfasd;" 
    

    因为String 是Java 中的一个特例,您不需要像所有作为类的原始变量一样添加new operator。示例:

    Integer i = 3; 
    Double d = 3.3d;
    

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 2013-07-01
      • 2014-06-09
      • 2020-03-08
      • 2011-10-24
      • 2021-09-16
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多