سؤال

يبدو أن مشغل Java's Unary Plus قد جاء من C ، عبر C ++.

int result = +1;   

يبدو أن له الآثار التالية:

  • قم بإلغاء صناديق المعامل ، إذا كان كائن غلاف
  • يعزز معاملته int, ، إذا لم يكن بالفعل int أو أوسع
  • يعقد قليلاً تحليل التعبيرات الشريرة التي تحتوي على أعداد كبيرة من العلامات المتتالية بالإضافة إلى

يبدو لي أن هناك طرقًا أفضل/أوضح للقيام بكل هذه الأشياء.

في هذا السؤال جدا, فيما يتعلق بمشغل النظير في C#، قال أحدهم إنه "هناك أن يتم تحميله بشكل زائد إذا شعرت بالحاجة".

ومع ذلك ، في جافا ، لا يمكن للمرء أن يحمل التحميل أي المشغل أو العامل. فهل يوجد مشغل Unary Plus في Java فقط لأنه موجود في C ++؟

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

المحلول

يقوم مشغل Unary Plus بتحويل تلقائي إلى int عندما يكون نوع المعامل byte, char, ، أو short. هذا يسمي الترويج الرقمي أحادي, ، ويمكنك من فعل أشياء مثل ما يلي:

char c = 'c';
int i = +c;

منحت ، إنها ذات استخدام محدود. ولكن لديها غرض. انظر المواصفات ، على وجه التحديد الأقسام §15.15.3 و §5.6.1.

نصائح أخرى

لا أعرف ، لكنني أظن أنه موجود للتماثل مع مشغل ناقص Unary (الضروري).

إليك عرضًا قصيرًا لما ستفعله Unary Plus لمتغير الشخصية:

private static void method(int i){
    System.out.println("int: " + i);
}

private static void method(char c){
    System.out.println("char: " + c);
}

public static void main(String[] args) {
    Character ch = 'X';
    method(ch);
    method(+ch);        
}

إخراج تشغيل هذا البرنامج هو:

char: X
int: 88

كيف تعمل: Unary + أو - قم بإلغاء صناديق المعامل ، إذا كان كائنًا غلافًا ، ثم قم بترقية معاملهم إلى int ، إن لم يكن بالفعل int أو أوسع. لذلك ، كما نرى ، في حين أن الدعوة الأولى إلى method سوف تختار char الحمل الزائد (إلغاء اللاصطناب فقط) ، ستختار المكالمة الثانية int نسخة من method. عامل ch من النوع Character سيتم نقله إلى method مثل int الحجة بسبب تطبيقها Unary Plus.

أظن أنه موجود لأنه في بعض الأحيان تكتب Plus Out يجعل الأمور أكثر وضوحًا. قد ترغب في التأكيد على حقيقة أن بعض الأرقام إيجابية ، على عكس بعض الأرقام السلبية.

أيضًا ، لتوفير مثال حقيقي في العالم حيث يتم استخدامه ، تميل درجات الحرارة الإيجابية إلى أن تكون مسبقة دائمًا مع زائد في بعض أجزاء العالم.

كان أحد أهداف تصميم Java هو أن تكون مألوفًا (لمطور C/C ++) ، لذلك عندما يتعلق الأمر بالمشغلين مثل هذا ، أنا متأكد من أنهم سيتعين عليهم أن يكون لديهم سبب قوي لاستبعاده ، وليس سببًا جيدًا للاحتياج إليه .

العديد من اللغات الأخرى لديها unary زائد. من المعتاد تضمينه ، و Penny Pinching لاستبعاده. إنه فقط بضعة خطوط في برنامج التحويل البرمجي.

يقوم عوامل Unary بما يلي لجافا:

  • "+" Unary Plus Operator ؛ يشير إلى القيمة الإيجابية (الأرقام إيجابية بدون هذا ، ومع ذلك)
  • "-" Unary Minus Corpator ؛ ينفي التعبير
  • ++ مشغل زيادة ؛ يزيد القيمة بمقدار 1
  • - عامل انخفاض ؛ يقلل قيمة من 1! عامل تكملة منطقي ؛ يزداد قيمة منطقية

مصدر: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html

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