Java是纯面向对象的吗?

5
我们说Java不是纯粹的面向对象编程,因为原始数据类型不是对象。但在下面的代码中,对象如何持有基本数据类型?
public class Test{

    public Object meth(Object obj){
        System.out.println(obj instanceof Object);//It prints true
        System.out.println("Value = "+obj);//It prints "Value = 1"
        return obj;
    }


    public static void main(String[] args) {
        int a = 1;
        System.out.println(new Test().meth(a));
    }
}

4
请查阅有关autoboxing的文档:http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html - ZhangChn
2
Java有一个整数类。http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html - FrankieTheKneeMan
正如其他人提到的,你观察到的现象是由于Java的自动装箱特性引起的。但我认为谈论语言是否“纯粹面向对象”并不是很有用;对于“面向对象”究竟意味着什么,并没有真正的定义,因此很难说一个语言是否完全符合这个定义。 - jacobm
12个回答

8
它被称为自动装箱。基本上,当你在需要将原始数据类型转换为对象的上下文中使用它们时,Java编译器会自动地为你进行转换。

4

在Java中有8种基本类型,因此它并不是纯面向对象的语言。但是基本类型使Java更加高效。


2

因为原始类型在Java中会自动转换为对象类型。例如,int类型会被包装在Integer对象中。


2
是的,你说得对……Java并不是纯面向对象的,因为它支持使用原始数据类型,如int、byte、long等,而这些都不是对象。

上述概念被称为自动装箱

自动装箱:自动装箱是Java编译器在原始类型和它们对应的包装类之间进行的自动转换。

来源:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html


2

Java是纯面向对象的,因为Java中的每个东西都被视为一个对象。然而,Java并非完全面向对象,因为它仍支持违反OOP思想的原始数据类型。


0

不,这不是因为数据类型不像在c#中数据类型是类一样。是的,Java引入了包装器类,但是Java有自动装箱和拆箱的概念,这使得情况变得复杂。


0

Java不是纯面向对象的编程语言,要满足一个编程语言是面向对象的,那么它必须满足以下面向对象的概念:

  • 封装/数据隐藏
  • 继承
  • 多态
  • 抽象
  • 所有预定义类型都是对象
  • 所有操作都通过向对象发送消息来执行
  • 所有用户定义的类型都是对象。

这些是必须满足的条件。有人说Java支持原始数据类型如int、float,所以它不是面向对象的,但实际上它是基于包装类INTEGER、FLOAT的。Java支持static关键字,这并不遵循面向对象的原则,因此Java不是纯面向对象的语言。


0

因为如果使用基本类型,Java 就不是纯粹的面向对象语言了。如需更多详细信息,请参阅链接


0
Java并不是纯面向对象的,因为它支持原始数据类型,如int、byte和long。这是真的,但我们在Java中有像Integer和Character这样的类,当隐式地将原始数据类型转换为这些类时,这种转换被称为自动装箱。这也可以显式地完成。

0

由于以下原因,Java不是纯面向对象语言。

  1. Java支持基本数据类型。
  2. Java支持静态的内容,并属于类而不是对象。
  3. Java支持枚举。

根据面向对象编程(OOP)的要求,所有事物都应该是一个对象。


1
实际上,每个类都是一个对象,其中java.lang.Class类是相同的Class类型对象。当然,原始类型通过自动装箱大大破坏了纯度。 - Tadas S

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