[java] Java에서 연산자 오버로드

Java로 연산자를 오버로드 할 수 있는지 알려주세요. Java의 어느 곳에서나 사용되는 경우 알려주십시오.



답변

아니요, Java는 사용자 정의 연산자 오버로드를 지원하지 않습니다. “custom”연산자 오버로딩에 근접한 Java의 유일한 측면은 문자열에 대한 + 처리입니다. 이는 상수의 컴파일 타임 연결 또는 StringBuilder / StringBuffer를 사용한 실행 시간 연결을 초래합니다. 같은 방식으로 작동하는 자체 연산자를 정의 할 수 없습니다.

자바처럼 (및 JVM 기반) 언어에 대해 수행 지원 연산자 오버로딩을, 당신은 볼 수 있었다 코 틀린 또는 멋져요 . 또는 Java 컴파일러 플러그인 솔루션으로 운이 좋을 수도 있습니다 .


답변

Java에서 연산자 오버로딩은 문자열 유형의 연결에 사용됩니다.

String concat = "one" + "two";

그러나 고유 한 연산자 오버로드를 정의 할 수 없습니다 .

a

답변

지적 모든 사람들뿐만 아니라 +문자열에 대한 과부하, -또한 모두 부동 소수점 및 정수 작업에 과부하 등이다 *하고 /.

[edit]
%또한 부동 소수점에 과부하가 걸리므로 C 또는 C ++ 배경을 가진 사람들에게는 약간 놀라운 일이 될 수 있습니다.


답변

Java는 연산자 오버로드를 허용하지 않습니다. 선호되는 접근 방식은 a.add(b)대신 클래스에서 메소드를 정의하여 조치를 수행하는 것입니다 a + b. Java와 같이 C에서 제외 된 다른 비트에 대한 요약은 다음과 같습니다. C 및 C ++에서 제거 된 기능


답변

Java는 연산자 오버로드를 허용하지 않으므로 직접 수행 할 수 없습니다.

그러나 한 가지 예외가 있습니다. ++ = 는 String 객체에 대해 오버로드됩니다.


답변

다른 많은 사람들이 대답했듯이 Java는 사용자 정의 연산자 오버로드를 지원하지 않습니다.

어쩌면 이것은 주제가 아닌 것일 수도 있지만 일부 답변에서 읽은 내용에 대해 언급하고 싶습니다.

가독성에 관하여.
비교:

  1. c = a + b
  2. c = a.add (b)

다시 봐!
어느 것이 더 읽기 쉬운가?

사용자 정의 형식을 만들 수있는 프로그래밍 언어는 내장 형식 (또는 기본 형식)과 같은 방식으로 작동 할 수 있어야합니다.

따라서 Java는 일반 프로그래밍의 기본 원칙을 위반합니다.
내장 유형의 객체를 사용자 정의 유형의 객체와 상호 교환 할 수 있어야합니다.
( ‘그가’내장 객체 ‘라고 말했습니까?’라고 궁금해 할 수도 있습니다. 예, 여기를 참조하십시오 .)

문자열 연결 정보 :

수학자들은 기호의 +를 사용하여 집합에 대한 정류 연산을합니다.
따라서 a + b = b + a임을 확신 할 수 있습니다.
문자열 연결 (대부분의 프로그래밍 언어에서)은이 일반적인 수학 표기법을 존중하지 않습니다.

a := "hello";
b := "world";
c := (a + b = b + a);

또는 Java로 :

String a = "hello";
String b = "world";
boolean c = (a + b).equals(b + a);

추가 :
Java 평등과 정체성이 어떻게 혼동되는지 주목하십시오. == (같음) 기호는 다음을 의미
합니다. 기본 유형의 평등
비. 따라서 사용자 정의 형식에 대한 신원 확인을 위해 equals () 함수를 동등 하게 사용해야합니다 .
하지만 … 연산자 오버로딩과 어떤 관련이 있습니까?
언어가 연산자 오버로드를 허용하는 경우 사용자는 항등 연산자에 적절한 의미를 부여 할 수 있습니다.


답변

Java Operator Overloading을 시도 할 수 있습니다 . 자체 제한이 있지만 연산자 오버로드를 실제로 사용하려는 경우 시도해 볼 가치가 있습니다.