ما هو الفرق بين الباحث و عدد صحيح في Java و C# ؟

StackOverflow https://stackoverflow.com/questions/564

  •  08-06-2019
  •  | 
  •  

سؤال

كنت أقرأ أكثر جويل على البرنامج عندما جئت عبر جويل سبولسكي تقول شيئا عن نوع معين من مبرمج معرفة الفرق بين int و Integer في Java/C# (وجوه المنحى البرمجة لغات).

إذن ما هو الفرق ؟

هل كانت مفيدة؟

المحلول

في جاوة ، إن 'int' نوع بدائية ، بينما 'صحيح' نوع هو كائن.

في C# ، إن 'int' نوع هو نفس System.Int32 و هو نوع قيمة (أي أكثر مثل جافا 'int').عدد صحيح (تماما مثل أي قيمة أخرى أنواع) يمكن أن يكون محاصر ("ملفوفة") إلى كائن.


الاختلافات بين الكائنات الأوليات إلى حد ما خارج نطاق هذا السؤال ، ولكن لتلخيص:

الكائنات توفير مرافق تعدد الأشكال ، يتم تمريرها من قبل المرجعية (أو بشكل أكثر دقة قد المراجع تمريرها حسب القيمة) ، تخصص من كومة.على العكس من ذلك ، الأوليات هي ثابتة الأنواع التي يتم تمريرها حسب القيمة وغالبا ما يخصص من المكدس.

نصائح أخرى

حسنا, في جافا الباحث البدائية بينما عدد صحيح هو كائن.بمعنى إذا قمت الجديد صحيح:

Integer i = new Integer(6);

يمكن استدعاء بعض الطريقة على:

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

بينما مع الباحث:

int i = 6;

لا يمكنك استدعاء أي طرق على ذلك ، لأنه ببساطة البدائية.لذلك:

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

سينتج خطأ, لأن الباحث هو كائن.

الباحث هو واحد من عدد قليل من الأوليات في جافا (جنبا إلى جنب مع شار و البعض الآخر).أنا لست متأكدا 100 ٪ ، ولكن أنا أعتقد أن صحيح وجوه أكثر أو أقل فقط int الملكية ومجموعة كاملة من الطرق للتفاعل مع تلك الممتلكات (مثل toString() على سبيل المثال).حتى عدد صحيح هو وسيلة يتوهم أن العمل مع الباحث (فقط وربما السلسلة هي وسيلة يتوهم أن العمل مع مجموعة من حرف).

أعرف ذلك جافا ليس ج ، ولكن منذ أن كنت لم المبرمجة في ج هذا هو الأقرب لا يمكن أن يأتي الجواب.ويساعد هذا الأمل!

صحيح وجوه جافادوك

صحيح Ojbect مقابلالباحث بدائية مقارنة

سأضيف ممتازة الإجابات الواردة أعلاه ، والحديث عن الملاكمة و علبته و كيف ينطبق هذا على جافا (على الرغم من C# لديه هو أيضا).سوف تستخدم فقط جافا المصطلحات لأني أكثر الاتحاد الافريقي الأمر الواقع مع أن.

كما الأجوبة المذكورة ، int هو مجرد رقم (تسمى بدون علبة نوع) ، في حين Integer هو كائن (الذي يحتوي على عدد ، ومن ثم محاصر نوع).في جافا فإن هذا يعني (وبصرف النظر عن عدم التمكن من أساليب الدعوة على int) لا يمكنك متجر int أو غيرها من أنواع الكائنات في مجموعات (List, Map, وما إلى ذلك).من أجل تخزينها ، يجب أن المربع الأول في المقابلة محاصر نوع.

جافا 5 فصاعدا لديهم ما يسمى لصناعة السيارات في الملاكمة و لصناعة السيارات في علبته والتي تسمح الملاكمة/علبته أن يكون ذلك من وراء الكواليس.قارن وعلى النقيض من:جافا الإصدار 5:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

جافا 1.4 أو في وقت سابق (أي الوراثة إما):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

لا بد من الإشارة إلى أنه على الرغم من الإيجاز في جافا الإصدار 5 ، كلا الإصدارين توليد متطابقة بايت كود.وهكذا ، على الرغم من أن صناعة السيارات في الملاكمة و السيارات علبته هو مناسب جدا لأنه يمكنك كتابة رمز أقل هذه العمليات هل يحدث وراء الكواليس, مع نفس وقت التشغيل التكاليف ، لذلك لا يزال لديك إلى أن يكون على بينة من وجودها.

ويساعد هذا الأمل!

أنا مجرد وظيفة هنا منذ بعض الوظائف الأخرى قليلا غير دقيقة فيما يتعلق C#.

الصحيح: int هو اسم مستعار System.Int32.
الخطأ: float هو ليس اسم مستعار System.Float, لكن بالنسبة System.Single

في الأساس, int هي محفوظة الكلمات الرئيسية في C# لغة البرمجة, و هو اسم مستعار System.Int32 نوع القيمة.

تعويم تعويم ليس هو نفسه ومع ذلك ، كما هو النظام المناسب لنوع "float"هو النظام.واحد.هناك بعض الأنواع مثل هذه التي احتفظت الكلمات الرئيسية التي لا يبدو لتتناسب مع نوع الأسماء مباشرة.

في C# لا يوجد فرق بين "int"و "System.Int32"،أو أي من أزواج أخرى أو الكلمات الرئيسية/نظام أنواع ، باستثناء عند تحديد enums.مع enums يمكنك تحديد حجم التخزين في هذه الحالة يمكنك فقط استخدام الكلمة المحجوزة ، وليس نظام التشغيل اكتب اسم.

الطقس قيمة في الباحث سيتم تخزينها في المكدس في الذاكرة ، أو المشار إليها كومة كائن يعتمد على السياق و كيفية استخدامه.

هذا الإعلان في الأسلوب:

int i;

تعرف متغير i من نوع System.Int32, يعيشون في سجل أو على المكدس ، اعتمادا على التحسينات.نفس الإعلان في نوع (البنية أو فئة) يحدد الأعضاء الميدانية.نفس الإعلان في طريقة حجة قائمة تحدد المعلمة مع نفس خيارات التخزين أما بالنسبة متغير محلي.(لاحظ أن هذه الفقرة ليست صحيحة إذا كنت بدء سحب مكرر الطرق إلى المزيج ، هذه هي الوحوش مختلفة تماما)

للحصول على كومة كائن يمكنك استخدام الملاكمة:

object o = i;

سيؤدي هذا إلى إنشاء نسخة محاصر من محتويات i على كومة.في IL يمكنك الوصول إلى الطرق على كومة الكائن مباشرة ، ولكن في C# عليك أن يلقي مرة أخرى إلى الباحث ، والتي سيتم إنشاء نسخة أخرى.وبالتالي فإن الكائن على كومة لا يمكن أن تتغير بسهولة في C# بدون إنشاء نسخة محاصر من جديد الباحث قيمة.(آه, هذه الفقرة لا يقرأ كل ذلك بسهولة.)

فيما يتعلق جافا 1.5 ، autoboxing هناك "هوس" أن يأتي للعب عند مقارنة عدد صحيح الكائنات.

في جاوة ، صحيح الكائنات مع القيم -128 إلى 127 هي ثابتة (هذا هو واحد بعينه قيمة عدد صحيح ، ويقول 23, كل عدد صحيح الكائنات مثيل من خلال البرنامج الخاص بك مع قيمة 23 نقطة بالضبط نفس الكائن).

سبيل المثال ، وهذا يعود صحيحا:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

في حين أن هذا يعود كاذبة:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

على == يقارن بالإشارة (لا المتغيرات تشير إلى نفس الكائن).

هذه النتيجة قد أو قد لا تختلف اعتمادا على ما JVM تستخدمه.مواصفات autoboxing جافا 1.5 يتطلب الاعداد الصحيحه (-128 إلى 127) دائما مربع إلى نفس المجمع الكائن.

حل ؟ =) واحدة ينبغي دائما استخدام عدد صحيح.يساوي() الأسلوب عند مقارنة عدد صحيح الكائنات.

System.out.println(i1.equals(i2)); //  true

مزيد من المعلومات في java.net على سبيل المثال في bexhuff.com

في جاوة هناك نوعان أساسيان في JVM.1) أنواع بدائية و 2) أنواع المراجع.الباحث هو نوع بدائي و صحيح هو نوع فئة (الذي هو نوع من نوع مرجع).

بدائية القيم لا تشترك الدولة مع غيرها من القيم البدائية.متغير النوع الذي هو نوع بدائي يحمل دائما البدائية قيمة من هذا النوع.

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

أيضا في جاوة كل شيء يتم تمريرها حسب القيمة.مع الأشياء القيمة التي يتم تمريرها هو الإشارة إلى الكائن.حتى فرق آخر بين الباحث و صحيح في جاوة هو كيف يتم تمرير المكالمات الأسلوب.على سبيل المثال في

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

المتغير اثنين يتم تمرير البدائية integer من النوع 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.


@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

هل ترى الفرق الآن ؟

في C# ، الباحث هو مجرد الاسم المستعار بالنسبة System.Int32, سلسلة System.String, ضعف System.Double الخ...

أنا شخصيا أفضل int, string, مزدوج, الخ.لأنها لا تتطلب using System; بيان :) سخيفة سبب أعلم...

هناك العديد من الأسباب لاستخدام فئات المجمع:

  1. ونحن الحصول على المزيد من السلوك (على سبيل المثال يمكننا استخدام أساليب)
  2. يمكننا تخزين قيم فارغة في حين أنه في الأوليات لا نستطيع
  3. مجموعات الدعم تخزين الكائنات وليس الأوليات.

هذا وقد سبق الإجابة عن جافا, وهنا C# الجواب:

"صحيح" غير صالحة اسم النوع في C# و "الباحث" هو مجرد اسم مستعار النظام.Int32.أيضا ، على عكس جافا (أو C++) لا يوجد أي أنواع بدائية في C#, كل مثيل من نوع في C# (بما في ذلك الباحث) هو كائن.هنا بعض الشرح كود:

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;
}

الباحث يستخدم تعلن بدائية متغير

e.g. int i=10;

عدد صحيح يستخدم لإنشاء مرجع متغير من الدرجة صحيح

Integer a = new Integer();

في منصات مثل جافا ، ints هي الأوليات في حين Integer هو الكائن الذي يحمل حقل عدد صحيح.الفارق المهم هو أن الأوليات هي دائما تمريرها حسب القيمة من خلال التعريف غير قابلة للتغيير.

أي عملية تنطوي على أخطاء بدائية متغير دوما بإرجاع قيمة جديدة.من ناحية أخرى, يتم تمرير كائنات حول بالإشارة.يمكن القول أن نشير إلى الكائن (ويعرف أيضا باسم الإشارة) هو أيضا يتم تمريرها حسب القيمة ، ولكن محتويات لا.

أكثر شيء واحد أن لا أرى في الإجابات السابقة:في جافا البدائية مغلفة الطبقات مثل Integer, Double, تعويم, منطقية...والسلسلة هي المفروض ان تكون ثابتة ، بحيث عندما تمر مثيل من تلك الطبقات الاحتجاج الأسلوب لا يمكن تغيير البيانات الخاصة بك في أي شكل من الأشكال ، في opositión مع أكثر من الفئات الأخرى ، والتي الداخلية البيانات يمكن أن تتغير من قبل الطرق العامة.حيث أن هذه الفئات فقط 'جالبة' أساليب لا واضعي' ، إلى جانب منشئ.

في برنامج java سلسلة حرفية يتم تخزينها في جزء منفصل من كومة الذاكرة فقط على سبيل المثال الحرفي ، إلى حفظ الذاكرة إعادة استخدام تلك الحالات

هل من أي وقت مضى مبرمجة من قبل ثم (الباحث) هو أحد أنواع بدائية يمكنك تعيين الخاص بك المتغيرات (مثل شار, تعويم, ...).

ولكن الصحيح هو التفاف الطبقة التي يمكنك استخدامها للقيام ببعض المهام على الباحث متغير (هـ.ز تحويله إلى سلسلة أو بالعكس,...) , ولكن تبقى ملاحظة أن الطرق في المجمع فصول هي ثابتة بحيث يمكنك استخدامها في أي وقت دون إنشاء مثيل من عدد صحيح من الدرجة.كما خلاصة :

int x;
Integer y; 

x و y هي كل متغيرات من نوع int y هي ملفوفة صحيح فئة لديها العديد من الأساليب التي تستخدمها ، لكن القضية تحتاج إلى استدعاء بعض وظائف صحيح فئة مجمع يمكنك أن تفعل ذلك ببساطة.

Integer.toString(x);

ولكن كن على علم أن كل من x و y هي corect ولكن إذا كنت ترغب في استخدامها فقط نوع بدائي ، استخدام نموذج بسيط (يستخدم لتحديد x).

جافا:

int, double, long, byte, float, double, short, boolean, char - الأوليات.تستخدم لعقد أنواع البيانات الأساسية بدعم من اللغة.البدائية أنواع ليست جزءا من التسلسل الهرمي كائن لا يرث الكائن.ثيت أن'be تمر بالرجوع إلى طريقة.

Double, Float, Long, Integer, Short, Byte, Character, ، Boolean, هي نوع مغلفة ، تعبئتها في java.lang.كل نوع عددي مغلفة تحديد المنشئات التي تسمح كائن شيدت من قيمة معينة ، أو تمثيل سلسلة من تلك القيمة.باستخدام الكائنات يمكن إضافة النفقات العامة حتى أبسط العمليات الحسابية.

بداية مع JDK 5, جافا وقد شملت اثنين من الميزات المفيدة جدا:autoboxing و autounboxing.Autoboxing/علبته يبسط إلى حد كبير من التعليمات البرمجية التي يجب أن تحويل أنواع بدائية في الكائنات ، والعكس بالعكس.

مثال على منشئات:

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
    }
}

P. S.هربرت Schildt كتاب اتخذ كمرجع.

الباحث هو نوع البيانات البدائية.صحيح هي التفاف الطبقة.فإنه يمكن تخزين الباحث البيانات الكائنات.

الباحث متغير يحمل 32 بت قيمة عدد صحيح.عدد صحيح (مع العاصمة) حاصل على مرجع إلى كائن من (الطبقة) نوع عدد صحيح أو إلى null.

جافا تلقائيا يلقي بين اثنين ؛ من عدد صحيح int كلما صحيح وجوه يحدث كوسيطة إلى int المشغل أو تعيين الباحث متغير أو الباحث تعيين قيمة متغير عدد صحيح.هذا الصب يسمى الملاكمة/علبته.

إذا كان متغير عدد صحيح الرجوع باطل هو بدون علبة ، صراحة أو ضمنا ، NullPointerException يتم طرح.

Int صحيح في Java و C# نوعان من المصطلحات المختلفة المستخدمة لتمثيل أشياء مختلفة.وهو واحد من البدائية أنواع البيانات التي يمكن أن تسند إلى متغير يمكن تخزين بالضبط.قيمة واحدة من نوع المعلنة في وقت واحد.

على سبيل المثال:

int number = 7;

حيث int يتم تعيين نوع البيانات إلى رقم متغير يحمل قيمة سبعة.لذلك int هو مجرد بدائية غير كائن.

في حين Integer هو مجمع من الدرجة البدائية نوع البيانات التي لديها أساليب ثابتة.التي يمكن استخدامها كحجة الأسلوب الذي يتطلب كائن ، حيث int يمكن استخدامها كحجة الأسلوب الذي يتطلب قيمة عدد صحيح, التي يمكن استخدامها في العمليات الحسابية التعبير.

على سبيل المثال:

Integer number = new Integer(5);

في كل لغة (Java و C#) int هو 4 بايت صحيح وقعت.

على عكس Java, C# تقدم الموقعة وغير القيم الصحيحة.كما Java و C# هي وجوه وجوه المنحى ، بعض العمليات في هذه اللغات لا خريطة مباشرة على التعليمات التي يقدمها تشغيل الوقت و لذلك يجب أن تكون محددة كجزء من كائن من نوع ما.

C# يوفر System.Int32 وهو نوع القيمة باستخدام جزء من الذاكرة التي تنتمي إلى نوع مرجع على كومة.

جافا يوفر java.lang.Integer وهو إشارة نوع التشغيل على int.الطرق في Integer لا يمكن جمعها مباشرة إلى وقت تشغيل التعليمات.لذلك نحن مربع الباحث قيمة تحويله إلى مثيل صحيح و استخدام الأساليب التي يتوقع سبيل المثال من نوع (مثل toString(), parseInt(), valueOf() وما إلى ذلك).

في C# متغير int يشير إلى System.Int32.Any 4-قيمة بايت في الذاكرة يمكن أن تفسر على أنها بدائية الباحث ، التي يمكن التلاعب بها من قبل مثيل النظام.Int32.لذا الباحث هو اسم مستعار System.Int32.When باستخدام عدد صحيح المتعلقة أساليب مثل int.Parse(), int.ToString() الخ.صحيح هو تجميعها في FCL System.Int32 البنية داعيا كل أساليب مثل Int32.Parse(), Int32.ToString().

في جافا ، int نوع هو نوع البيانات البدائية, حيث Integer نوع هو كائن.

في C# ، int نوع هو أيضا نوع البيانات نفسه System.Int32.وهو integer (تماما مثل أي قيمة أخرى أنواع) يمكن أن يكون محاصر ("ملفوفة") إلى كائن.

في جافا الباحث هو نوع البيانات البدائية بينما الصحيح هو مساعد الدرجة ، هو استخدام تحويل نوع بيانات واحد إلى آخر.

على سبيل المثال:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

بدائية أنواع البيانات هي تخزين أسرع الذاكرة المتوفرة حيث مساعد فئة معقدة وتخزينها في هيب الذاكرة.

إشارة من "ديفيد Gassner" جافا التدريب الأساسي.

"الباحث" هو بدائي نوع البيانات و "صحيح" في المجمع الدرجة في جاوة."صحيح" يمكن استخدامها كحجة الأسلوب الذي يتطلب كائن ، حيث "الباحث" يمكن استخدامها كحجة الأسلوب الذي يتطلب قيمة عدد صحيح, التي يمكن استخدامها في العمليات الحسابية التعبير.

01.صحيح يمكن أن تكون فارغة.ولكن الباحث لا يمكن أن تكون فارغة.

Integer value1 = null; //OK

int value2 = null      //Error

02.فقط يمكن أن تمر فئات المجمع نوع القيم إلى أي جمع الصف.

(فئات المجمع - منطقية,حرف,بايت,Short,Integer,Long,Float,Double)

List<Integer> element = new ArrayList<>();
int valueInt = 10;
Integer  valueInteger = new Integer(value);
element.add(valueInteger);

ولكن عادة نضيف بدائية القيم إلى جمع الصف ؟ هو نقطة 02 الصحيح ؟

List<Integer> element = new ArrayList<>();
element.add(5);

نعم 02 الصحيح ، beacouse autoboxing.

Autoboxing هو التحويل التلقائي أن المحول البرمجي java يجعل بين نوع بدائي وما يقابلها من المجمع الدرجة.

ثم 5 تحويل باعتبارها قيمة عدد صحيح من قبل autoboxing.

int هو مسبقا في مكتبة وظيفة c# ولكن في جافا يمكن إنشاء كائن من Integer

(نسخة جافا) في كلمات بسيطة الباحث بدائية صحيح هو المجمع الكائن الباحث.

مثال واحد حيث أن استخدام عدد صحيح vs int, عندما تريد مقارنة الباحث متغير مرة أخرى فارغة وسوف رمي خطأ.

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...}

في جافا حسب علمي إذا كنت متعلم ثم عند كتابة int a;ثم في جافا عامة فإنه سيتم ترجمة التعليمات البرمجية مثل Integer a = new Integer().حتى في الأدوية Integer لا يستخدم ولكن int يتم استخدامه.حتى لا يكون هناك مثل هذه الفرق هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top