int a = 5;
a
是一个对象吗?
有人能向我解释一下在Java中为什么每个东西都是对象吗?
java.lang.Object
(注意:java.lang.Object
没有超类。;))在Java 8中,将代码块作为对象是最令人兴奋的功能之一。以下示例都将是闭包,因此是对象。
x => x + 1
(x) => x + 1
(int x) => x + 1
(int x, int y) => x + y
(x, y) => x + y
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
() => { System.out.println("I am a Runnable"); }
例如,这里的代码块将作为Runnable
对象传递
new Thread(() => { System.out.println("I am a Runnable"); }).start();
http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
ArrayList<String>
和ArrayList<Integer>
之间的差异,即类型不会完全被擦除。 - Peter Lawreyclass X<A extends java.util.List, B extends java.util.Comparator, C extends java.math.BigDecimal, etc, etc>
。 - bestsss在Java中,这是不正确的。例如,int
实际上是一种原始数据类型。在Java中,所有东西都是继承了 Object
的 Object
。其他所有东西都不是。
因此,例如,您无法像对象一样操作命名空间(在Java术语中称为包),但在Erlang或Clojure中可以。
尽管Java提供了自动装箱功能,可以将原始数据类型转换为对象。在你的情况下,如果你说
Integer a = 5;
Integer
引用中。如果您想了解自动装箱,请单击此处:自动装箱文档。Java中的对象:对象。T
(代表布尔值true)也是一个对象。在Java中,你有原始类型(int、boolean、char、byte等),而其他所有类型都扩展了Object
类,因此是一个对象。
但是“一切皆为对象”的概念主要意味着你不能在对象类之外编写代码。例如,你不能编写脚本文件,必须将其封装在类中。
a
不是对象而是原始类型的值,但Java会尽力隐藏这一事实。自Java 5开始,在必要时将原始类型自动转换为相应的对象包装器, 以便您可以将它们存储在容器中,将它们传递给需要对象的方法等。a
这里是原始类型。Java有原始类型和对象。
我认为这源于Java早期常与C进行比较,因为它们都属于结构化的语言。然而,这个说法本身并不正确。
Java 中并非所有东西都是对象。还有以下可以在对象内部使用的原始类型(定义来自Oracle Tutorials):
字节(byte)数据类型是一个8位的有符号二进制补码整数, 最小值为-128,最大值为127(包括)。 在需要保存大型数组时,使用byte数据类型可以有助于节省内存。 短(short)数据类型是一个16位的有符号二进制补码整数,最小值为-32,768,最大值为32,767(包括), 与byte相同,可以在需要节省内存的大型数组中使用。 int数据类型是一个32位的有符号二进制补码整数,最小值为-2,147,483,648,最大值为2,147,483,647(包括)。 通常情况下,对于整数值,除非有其他原因(例如上述情况),否则应选择此数据类型。 long数据类型是一个64位的有符号二进制补码整数,最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807(包括)。 当需要比int提供的范围更广的值范围时,请使用此数据类型。 float数据类型是单精度32位IEEE 754浮点数。建议在需要节省浮点数的大型数组时使用它,而不是double。 但是,此数据类型不应用于货币等精确值。这种情况需要使用java.math.BigDecimal类。 double数据类型是双精度64位IEEE 754浮点数。对于十进制值,通常应选择此数据类型。 布尔(boolean)数据类型只有两个可能的值:true和false。用这种数据类型来跟踪真/假条件的简单标志。 char数据类型是一个16位Unicode字符。最小值为'\u0000'(或0),最大值为'\uffff'(或65,535包括)。Java中的大多数其他内容都是对象(它们继承自Object
类),并且main()
方法是从类的实例运行的。为了允许原始类型在主要基于对象的系统中使用,Java提供了包装器类,这些类是表示原始值的对象(例如,Integer
类表示与int
相同类型的数据)。Java还执行称为autoboxing的操作,当您想要将int
存储在ArrayList<Integer>
中时,它会自动将原始类型包装在其对象包装器中。同样,您可以执行类似int x = intArrayList.get(0);
的操作,Java将取消存储在数组中的Integer
。请注意,这些自动装箱操作并不完全免费,因为它们具有与之相关的性能成本,因此如果性能对您的系统真的很重要,请注意这一点。
a
是一个对象吗?那么也可以问,5
是一个对象吗? - Lee Taylor