9

入力すると

int a = 5;

aオブジェクトですか?

誰かが私にJavaですべてのものがオブジェクトである方法を説明できますか?

4

10 に答える 10

16

すべてのオブジェクトはjava.lang.Object(注:java.lang.Objectスーパー クラスはありません。;))

しかし、オブジェクトではないものもたくさんあります。

  • プリミティブと参照。
  • フィールド (内容ではなくフィールド自体)
  • ローカル変数とパラメーター。
  • ジェネリック クラス (Java 8 で変更される可能性があります)
  • メソッド (Java 8 で変更されます)
  • コードのブロック (Java 8 で変更されます)

コードのブロックをオブジェクトとして持つことは、Java 8 の最もエキサイティングな機能の 1 つです。次の例はすべてクロージャであり、したがってオブジェクトです。

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

于 2012-08-07T10:36:30.723 に答える
4

これはJava には当てはまりません。たとえば、intは実際にはプリミティブです。Java では、すべてがObjectwhat extendsObjectです。他のすべてはそうではありません

たとえば、オブジェクトのように名前空間 (Java 用語ではパッケージ) を操作することはできませんが、Erlang や Clojure では操作できます。

Java は、プリミティブをオブジェクトに変換できるオートボクシング機能を提供します。あなたの場合、あなたが言うなら

Integer a = 5;

javaは5をInteger参照にボックス化します。オートボクシングについて読みたい場合は、ここをクリックしてください: autoboxing docs . Java のオブジェクト:オブジェクト

技術的にすべてがオブジェクトである言語を探している場合は、たとえば Common Lisp を試すことができます。Lisp では、T(boolean true を表す) もオブジェクトです。

于 2012-08-07T10:35:01.850 に答える
3

aオブジェクトではなくプリミティブ型の値ですが、Java はこの事実を隠そうとあらゆる試みを行います。Java 5 以降、プリミティブは必要に応じて対応するオブジェクト ラッパーに自動的に変換されるため、コンテナーに格納したり、オブジェクトを必要とするメソッドに渡したりすることができます。

于 2012-08-07T10:37:19.943 に答える
3

Java のすべてがオブジェクトというわけではありません。一部の値は、いくつか例を挙げると、プリミティブ型です: intfloatdoublebytechar... これらのプリミティブ型をオブジェクトにラップする方法があります (Java でこれを自動的に行うこともできます)。

より正確に言うと、「Java では、すべてがオブジェクトで [定義] されている」と言えます。Java では、クラス メソッドでもインスタンス メソッドでもない関数やサブルーチンを定義することはできません。C++たとえば、次のことができます。

于 2012-08-07T10:38:12.533 に答える
3

いいえ、これはオブジェクトではありません。Java は純粋なオブジェクト指向言語ではprimitivesありませんstaticObject java としてプリミティブ変数を作成するために、 IntegerBooleanなどのラッパー クラスが導入されました。

于 2012-08-07T10:33:58.790 に答える
3

Java にはプリミティブ型 (int、boolean、char、byte...) があり、それ以外はすべてObjectクラスを拡張するため、オブジェクトです。

しかし、すべてがオブジェクトであるということは、ほとんどの場合、オブジェクト クラスの外にコードを持つことができないことを意味します。例のスクリプト ファイルを作成できます。クラスにラップする必要があります。

于 2012-08-07T10:34:44.440 に答える
3

aここにプリミティブがあります。Java には、プリミティブとオブジェクトの両方があります。

于 2012-08-07T10:35:03.097 に答える
2

彼らは間違ってる。a はオブジェクトではありません。

于 2012-08-07T10:34:00.647 に答える
2

これは、Java が C と比較されることが多かった「初期」と、その構造的性質に由来すると思います。ただし、このステートメント自体は真実ではありません。

于 2012-08-07T10:35:53.723 に答える
1

Javaのすべてがオブジェクトであるとは限りません。オブジェクト内で使用できる次のプリミティブ型もあります( Oracleチュートリアルから取得した定義:

  • バイト:バイトデータ型は、8ビットの符号付き2の補数整数です。最小値は-128、最大値は127(両端を含む)です。バイトデータ型は、メモリの節約が実際に重要である大規模な配列でメモリを節約するのに役立ちます。また、制限がコードを明確にするのに役立つintの代わりに使用することもできます。変数の範囲が制限されているという事実は、ドキュメントの形式として役立ちます。

  • short:shortデータ型は、16ビットの符号付き2の補数整数です。最小値は-32,768、最大値は32,767(両端を含む)です。バイトの場合と同様に、同じガイドラインが適用されます。メモリの節約が実際に重要な状況では、shortを使用して大きな配列のメモリを節約できます。

  • int:intデータ型は、32ビットの符号付き2の補数整数です。最小値は-2,147,483,648、最大値は2,147,483,647(両端を含む)です。整数値の場合、他の何かを選択する理由(上記のような)がない限り、通常、このデータ型がデフォルトの選択です。このデータ型は、プログラムが使用する数値に対して十分な大きさである可能性がありますが、より広い範囲の値が必要な場合は、代わりにlongを使用してください。

  • long:longデータ型は、64ビットの符号付き2の補数整数です。最小値は-9,223,372,036,854,775,808、最大値は9,223,372,036,854,775,807(両端を含む)です。intによって提供される値よりも広い値の範囲が必要な場合は、このデータ型を使用します。

  • float:floatデータ型は、単精度32ビットIEEE754浮動小数点です。その値の範囲はこの説明の範囲を超えていますが、Java言語仕様の「浮動小数点の型、形式、および値」セクションで指定されています。バイトとショートの推奨事項と同様に、浮動小数点数の大きな配列でメモリを節約する必要がある場合は、(doubleではなく)floatを使用してください。このデータ型は、通貨などの正確な値には使用しないでください。そのためには、代わりにjava.math.BigDecimalクラスを使用する必要があります。Numbers and Stringsは、Javaプラットフォームによって提供されるBigDecimalおよびその他の便利なクラスをカバーしています。

  • double:doubleデータ型は、倍精度64ビットIEEE754浮動小数点です。その値の範囲はこの説明の範囲を超えていますが、Java言語仕様の「浮動小数点の型、形式、および値」セクションで指定されています。10進値の場合、通常、このデータ型がデフォルトの選択です。上記のように、このデータ型は、通貨などの正確な値には使用しないでください。

  • boolean:ブールデータ型には、trueとfalseの2つの可能な値しかありません。このデータ型は、真/偽の状態を追跡する単純なフラグに使用します。このデータ型は1ビットの情報を表しますが、その「サイズ」は正確に定義されたものではありません。

  • char:charデータ型は単一の16ビットUnicode文字です。最小値は「\u0000」(または0)、最大値は「\ uffff」(または65,535を含む)です。

Javaの他のほとんどのものオブジェクトであり(クラスから継承しますObject)、main()メソッドはクラスのインスタンスから実行されます。主にオブジェクトベースのシステムでプリミティブを使用できるようにするために、Javaは、プリミティブ値を表すオブジェクトであるラッパークラスを提供します(たとえば、Integerクラスはと同じタイプのデータを表しますint)。Javaは、オートボクシングと呼ばれる機能も実行します。たとえば、をに格納する場合は、プリミティブ型をオブジェクトラッパーで自動的にラップしintますArrayList<Integer>。同様に、あなたは次のようなことをすることができint x = intArrayList.get(0);、JavaはInteger配列に格納されます。これらのオートボクシング操作は、パフォーマンスコストが伴うため、完全に無料ではないことに注意してください。パフォーマンスがシステムにとって本当に重要な場合は、このことに注意してください。

于 2012-08-07T10:56:57.947 に答える