object型とは decimal - JavaとC#のintとIntegerの違いは何ですか?




12 Answers

まあ、Javaではintはプリミティブで、IntegerはObjectです。 意味、あなたが新しいIntegerを作った場合:

Integer i = new Integer(6);

あなたは私の上でいくつかのメソッドを呼び出すことができます:

String s = i.toString();//sets s the string representation of i

intとの間:

int i = 6;

それは単なるプリミティブなので、メソッドを呼び出すことはできません。 そう:

String s = i.toString();//will not work!!!

intはオブジェクトではないため、エラーが発生します。

intは、Javaのいくつかのプリミティブのうちの1つです(charや他のものとともに)。 私は100%確信しているわけではありませんが、Integerオブジェクトにはintプロパティとそのプロパティ(たとえばtoString()メソッドなど)とやりとりするメソッドがたくさんあると考えています。 だから、Integerはintを使って作業するための素晴らしい方法です(ちょうど文字列がchar型のグループを扱う素晴らしい方法です)。

私はJavaがCではないことを知っていますが、Cでプログラミングしたことがないので、これは私が答えに来ることができる最も近いものです。 お役に立てれば!

Integerオブジェクトjavadoc

整数の比較とintの初期比較

c# java integer int

Joel SpolskyがJava / C#(Object Oriented Programming Languages)のintInteger型の違いを知っている特定のタイプのプログラマについて何か言ってきたときに私はMore Joel on Softwareを読んでいました

では、違いは何ですか?




他の投稿のいくつかがC#に関して少し不正確であるので、私はここに投稿します。

正しい: intは、 System.Int32エイリアスです。
誤: floatSystem.Floatエイリアスではなく、 System.SingleエイリアスですSystem.Float

基本的に、intはC#プログラミング言語の予約キーワードであり、 System.Int32値型の別名です。

floatとFloatは同じではありませんが、 '' float ''の正しいシステムタイプはSystem.Singleです。 このようないくつかのタイプは、タイプ名と直接一致しないような予約されたキーワードを持っています。

C#では、 '' int ''と '' System.Int32 ''、または他のペアやキーワード/システムタイプの間に違いはありませんが、enumを定義するときを除きます。 列挙型では、使用する記憶領域のサイズを指定することができます。この場合は、システム実行時の型名ではなく、reservedキーワードのみを使用できます。

intの値はスタック、メモリ、または参照されるヒープオブジェクトとして格納され、コンテキストや使用方法によって異なります。

メソッド内のこの宣言:

int i;

最適化に応じて、レジスタまたはスタックに存在するSystem.Int32型の変数iを定義します。 型(構造体またはクラス)内の同じ宣言はメンバフィールドを定義します。 メソッド引数リストの同じ宣言は、ローカル変数と同じ記憶域オプションを持つパラメータを定義します。 (この段落は、イテレータメソッドをミックスに引き込む場合には有効ではないことに注意してください。これらはすべて異なるビーストです)

ヒープオブジェクトを取得するには、ボクシングを使用することができます:

object o = i;

これは、ヒープ上のiの内容のボックス化されたコピーを作成します。 ILでは、ヒープオブジェクトのメソッドに直接アクセスできますが、C#ではintにキャストし直す必要があり、別のコピーが作成されます。 したがって、新しいint値の新しいボックス化されたコピーを作成せずに、ヒープ上のオブジェクトをC#で簡単に変更することはできません。 (ああ、この段落では簡単にすべてを読むことはできません。)




Javaでは、 JVM 2つの基本タイプがあります。 1)プリミティブ型と2)参照型。 intはプリミティブ型で、Integerはクラス型(参照型の一種)です。

プリミティブ値は、他のプリミティブ値と状態を共有しません。 型がプリミティブ型である変数は、常にその型のプリミティブ値を保持します。

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

オブジェクトは、動的に作成されたクラスインスタンスまたは配列です。 参照値(しばしば単に参照)は、これらのオブジェクトへのポインタであり、オブジェクトを参照しない特別なヌル参照です。 同じオブジェクトに多くの参照があるかもしれません。

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

また、Javaではすべてが価値によって渡されます。 オブジェクトの場合、渡される値はオブジェクトへの参照です。 したがって、javaのintとIntegerの別の違いは、それらがメソッド呼び出しでどのように渡されるかです。 たとえば、

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

変数2は、基本整数型2として渡されます。

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

変数2は、整数値2を保持するオブジェクトへの参照として渡されます。

@WolfmanDragon:参照渡しは次のように動作します:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

インクリメントが呼び出されると、変数aに参照(ポインタ)が渡されます。 インクリメント関数は変数aを直接変更します。

オブジェクト型の場合、次のように動作します。

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

違いは今見えますか?




Javaのようなプラットフォームでは、 intはプリミティブですが、 Integerは整数フィールドを保持するオブジェクトです。 重要な違いは、プリミティブは常に値によって渡され、定義によって不変であるということです。

プリミティブ変数を含む操作は、常に新しい値を返します。 一方、オブジェクトは参照によって渡されます。 オブジェクト(AKA参照)へのポイントも値渡しされていると主張できますが、内容はそうではありません。




これは既にJavaのために答えられています、ここではC#の答えです:

"Integer"はC#では有効な型名ではなく、 "int"はSystem.Int32の単なるエイリアスです。 また、Java(またはC ++)とは異なり、C#には特別なプリミティブ型はなく、C#の型のすべてのインスタンス(intを含む)はオブジェクトです。 いくつかのデモ用コードがあります:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}



Java:

intdoublelongbytefloatdoubleshortbooleanchar - プリミティブ。 言語でサポートされている基本データ型を保持するために使用されます。 プリミティブ型はオブジェクト階層の一部ではなく、Objectを継承しません。 テットはメソッドを参照することで渡すことができます。

DoubleFloatLongIntegerShortByteCharacter 、およびBooleanは、 java.langにパッケージ化された型ラッパーです。 すべての数値型ラッパーは、指定された値またはその値の文字列表現からオブジェクトを構築できるようにするコンストラクターを定義します。 オブジェクトを使用すると、最も単純な計算にもオーバーヘッドが追加されます。

JDK 5以降、Javaには2つの非常に便利な機能が含まれています:オートボクシングとオートナンバー。 オートボクシング/アンボクシングは、プリミティブ型をオブジェクトに変換しなければならないコードを大幅に簡素化し、合理化します。

コンストラクタの例:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

ボクシング/アンボクシングの例:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

autoboxing / autounboxingの例:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

PS Herbert Schildtの本を参考にしました。




これまでにプログラムしたことがありますか(int)は、変数に設定できるプリミティブ型の1つです(char、floatなど)。

しかし、Integerはラッパークラスであり、int変数のいくつかの関数を実行するために使うことができます(例えば、文字列に変換するか、逆に変換するなど)。しかし、ラッパークラスのメソッドは静的であり、いつでもIntegerクラスのインスタンスを作成せずに 要約として:

int x;
Integer y; 

xとyはどちらもint型の変数ですが、yはIntegerクラスでラップされていますが、いくつかのメソッドがありますが、単純にIntegerラッパークラスのいくつかの関数を呼び出す必要があります。

Integer.toString(x);

xとyの両方がcorectであることに注意してください。ただし、それらをプリミティブ型として使用する場合は、単純フォーム(xの定義に使用)を使用してください。




JavaとC#のintとIntegerは、異なることを表現するために使用される2つの異なる用語です。 これは、正確に格納できる変数に割り当てることができる基本的なデータ型の1つです。 一度に宣言された型の1つの値。

例えば:

int number = 7;

intは、値7を保持する変数番号に割り当てられたデータ型です。 したがって、 intはオブジェクトではなくプリミティブです。

一方、 Integerは静的メソッドを持つプリミティブデータ型のラッパークラスです。 これは、オブジェクトが必要なメソッドの引数として使用できます。intは、整数値が必要なメソッドの引数として使用でき、算術式に使用できます。

例えば:

Integer number = new Integer(5);



Javaでは、 int型はプリミティブ型であり、 Integer型はオブジェクトです。

C#では、 int型もSystem.Int32と同じデータ型です。 integerは他の値型と同様に、オブジェクトにボックス化(ラップ)できます。




"int"はプリミティブデータ型であり、JavaのWrapperクラスでは "Integer"です。 "整数"はオブジェクトを必要とするメソッドへの引数として使用できます。整数値が必要なメソッドの引数として "int"を使用でき、算術式に使用できます。




(Java版)簡単な言葉では、intはプリミティブで、Integerはintのラッパーオブジェクトです。

Integerとintのどちらを使用するかの例の1つで、比較とint変数を再びnullにすると、エラーがスローされます。

int a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is wrong - cannot compare primitive to null
{
do something...}

Instead you will use,
Integer a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is correct/legal
{ do something...}



私の知る限りのJavaでは、学習者であれば、intを書くときは; java genericでは、 Integer a = new Integer()ようなコードをコンパイルします。 したがって、ジェネリックスごとにIntegerは使用されず、 intが使用されます。 そのような違いがあります。




Related