한 가지만 명확히하고 싶습니다. 이것은 어느 것이 더 나은지에 대한 질문이 아니며, 그 부분은 다른 사람에게 토론하기 위해 남겨 둡니다. 상관 없어요 면접에서이 질문을 받았으며 조금 더 배우는 것이 도움이 될 것이라고 생각했습니다.
이것들은 내가 생각해 낼 수있는 것들입니다.
- Java는 “플랫폼 독립적”입니다. 요즘에는 모노 프로젝트 가 있다고 말할 수 있으므로 C #도 고려 될 수 있지만 약간 과장된 것 같습니다. 왜? 글쎄, Java의 새로운 릴리스가 완료되면 지원하는 모든 플랫폼에서 동시에 사용할 수 있습니다. 반면에 Mono 구현에서 아직 C # 3.0의 몇 가지 기능이 여전히 누락 되었습니까? 아니면 여기서 비교해야하는 것이 실제로 CLR 과 JRE 입니까?
- Java는 이벤트 및 대리자를 지원하지 않습니다. 내가 아는 한.
- Java에서는 모든 메소드가 가상입니다
- 개발 도구 : Visual Studio와 같은 도구는 아직 없다고 생각합니다. 특히 팀 에디션으로 작업 한 경우 내가 의미하는 바를 알게됩니다.
관련이 있다고 생각되는 다른 사람을 추가하십시오.
업데이트 : 방금 떠 올랐습니다 .Java에는 클래스, 메소드 등에 대한 사용자 정의 속성이 없습니다. 그렇지 않습니까?
답변
Java 7과 C # 3 비교
(여기서는 Java 7의 일부 기능에 대해서는 언급하지 않았지만 using
Java 1-6에 비해 모든 버전의 C #의 장점은 제거되었습니다.)
모든 요약이 올바른 것은 아닙니다.
- Java 메소드는 기본적으로 가상 이지만 최종 메소드로 만들 수 있습니다. C #에서는 기본적으로 봉인되어 있지만 가상으로 만들 수 있습니다.
- 무료 (예 : Eclipse, Netbeans) 및 상업용 (예 : IntelliJ IDEA) 모두 Java 용 IDE가 많이 있습니다.
그 외에도 (그리고 이미 요약 된 내용) :
- 제네릭은 둘 사이에서 완전히 다릅니다. Java 제네릭은 컴파일 타임 “트릭”(그러나 유용한 것)입니다. C에서 # 및 .NET 제네릭도 실행 시간 유지하고있다 값 유형뿐만 아니라 참조 타입 작업, 적절한 효율을 유지하는 (예를 들어
List<byte>
A와byte[]
다소 박스형 바이트의 배열보다 배면으로). - C #에서 예외를 확인하지 않았습니다.
- Java는 사용자 정의 값 유형을 만들 수 없습니다
- Java에는 연산자 및 변환 오버로드가 없습니다.
- Java에는 반복자를 간단히 구현하기위한 반복자 블록이 없습니다.
- Java에는 LINQ와 같은 것이 없습니다.
- 델리게이트가 없기 때문에 Java에는 익명 메소드 및 람다 식과 같은 것이 없습니다. 익명의 내부 클래스는 일반적으로 이러한 역할을 수행하지만 어수선합니다.
- Java에는 표현식 트리가 없습니다.
- C #에는 익명의 내부 클래스가 없습니다.
- C #에는 Java의 내부 클래스가 전혀 없습니다. 실제로 C #의 모든 중첩 클래스는 Java의 정적 중첩 클래스와 같습니다.
- 자바는 정적 클래스가없는 (없는 모든 인스턴스 생성자, 변수에 사용할 수없는 등의 매개 변수)
- Java에는 C # 3.0 익명 유형과 동등한 것이 없습니다.
- Java에는 암시 적으로 유형이 지정된 로컬 변수가 없습니다.
- Java에는 확장 방법이 없습니다
- Java에는 객체 및 컬렉션 이니셜 라이저 표현식이 없습니다.
- 액세스 수정자는 다소 다릅니다. Java에는 현재 어셈블리와 직접적으로 동등한 요소가 없으므로 “내부”가시성에 대한 아이디어가 없습니다. C #에서는 네임 스페이스 (및 상속)를 고려한 Java의 “기본”가시성에 해당하지 않습니다.
- Java와 C #의 초기화 순서는 미묘하게 다릅니다 (C #은 기본 형식의 생성자에 대한 체인 호출 전에 변수 이니셜 라이저를 실행합니다)
- Java에는 언어의 일부로 속성이 없습니다. 그것들은 get / set / is 메소드의 규칙입니다.
- Java에는 “안전하지 않은”코드와 동등한 것이 없습니다
- Interop은 Java의 JNI보다 C # (및 일반적으로 .NET)에서 더 쉽습니다.
- Java와 C #은 열거 형에 대한 아이디어가 약간 다릅니다. Java는 훨씬 객체 지향적입니다.
- Java에는 전 처리기 지시문이 없습니다 (C #의 #define, #if 등).
- 자바의 ‘C 번호의 상응 없다
ref
및out
참조 파라미터를 흘리는 - Java에는 부분 유형과 동등한 것이 없습니다.
- C # 인터페이스는 필드를 선언 할 수 없습니다
- Java에는 부호없는 정수 유형이 없습니다.
- Java는 10 진수 유형에 대한 언어 지원 이 없습니다 . (java.math.BigDecimal은 System.Decimal 과 같은 것을 제공 하지만 차이점은 있지만 언어 지원은 없습니다)
- Java에는 널 입력 가능 값 유형과 동등한 것이 없습니다.
- 자바에서 복싱은 미리 정의 된 (그러나 “정상적인”) 참조 유형을 사용합니다. C # 및 .NET의 복싱은 CLR에서 모든 값 유형에 대한 복싱을 위해 참조 유형을 작성하여보다 투명합니다.
이것은 철저하지는 않지만 내가 생각할 수없는 모든 것을 다룹니다.
답변
다음은 C #과 Java의 차이점에 대한 Dare Obasanjo의 심층 참조입니다. 나는 항상이 기사를 언급 할 때이 기사를 언급하고있다.
답변
C #에는 매우 편리한 자동 속성이 있으며 적어도 getter 및 setter에 사용자 지정 논리가없는 경우 코드를 더 깨끗하게 유지하는 데 도움이됩니다.
답변
Java에없는 C #의 기능 • C #에는 더 많은 기본 유형과 산술 예외를 포착하는 기능이 포함되어 있습니다.
• 연산자 오버로딩 및 사용자 정의 캐스트와 같은 많은 것이 Java에 비해 많은 표기법 편의성을 포함하고 있으며, 이는 C ++ 프로그래머 커뮤니티에 이미 익숙합니다.
• 이벤트 처리는 “일등 시민”이며 언어 자체의 일부입니다.
• 클래스와 유사하지만 스택에 할당 될 수있는 “structs”의 정의를 허용합니다 (C # 및 Java의 클래스 인스턴스와 달리).
• C #은 언어 구문의 일부로 속성을 구현합니다.
• C #을 사용하면 스위치 문이 문자열에서 작동 할 수 있습니다.
• C #은 클로저 기능을 제공하는 익명의 메서드를 허용합니다.
• C #에서는 함수형 yield 키워드를 통해 코 루틴을 사용하는 반복자를 허용합니다.
• C #은 C ++ 및 SQL이 공유하는 기능인 여러 값의 반환을 지원하는 출력 매개 변수를 지원합니다.
• C #에는 네임 스페이스의 별칭을 지정할 수있는 기능이 있습니다.
• C #에는 클래스가 자체 클래스 메서드와 별도로 인터페이스의 메서드를 구체적으로 구현할 수있는 “명시 적 멤버 구현”이 있습니다. 이를 통해 동일한 이름의 메소드를 갖는 두 가지 다른 인터페이스를 구현할 수도 있습니다. 인터페이스의 메소드는 공용 일 필요는 없습니다. 해당 인터페이스를 통해서만 액세스 할 수 있습니다.
• C #은 COM과의 통합을 제공합니다.
• C 및 C ++의 예에 따라 C #에서는 기본 및 참조 유형에 대한 참조 별 호출을 허용합니다.
C #에없는 Java의 기능
• Java의 strictfp 키워드는 부동 소수점 연산의 결과가 플랫폼간에 동일하게 유지되도록합니다.
• Java는 오류 트래핑 및 처리를보다 효과적으로 시행하기 위해 검사 예외를 지원합니다.
답변
또 다른 좋은 자료는 http://www.javacamp.org/javavscsharp/ 입니다 .
이 사이트에는이 두 프로그래밍 언어 간의 거의 모든 차이점을 설명하는 많은 예제가 열거되어 있습니다.
속성에 대해 Java에는 거의 동일한 방식으로 작동하는 주석이 있습니다.
답변
제네릭 :
Java 제네릭을 사용하면 Java에서 제네릭 클래스를 컴파일 할 때 컴파일러가 type 매개 변수를 제거하고 Object를 모든 곳에서 대체하기 때문에 .NET에서 얻는 실행 효율성을 실제로 얻지 못합니다. 예를 들어 Foo<T>
클래스 가있는 경우 Java 컴파일러는 마치 바이트 코드를 마치 바이트 코드처럼 생성합니다 Foo<Object>
. 이것은 캐스팅과 박스 / 박스 해제가 “백그라운드”에서 수행되어야 함을 의미합니다.
나는 한동안 Java / C #을 가지고 놀았고, 내 의견으로는, 언어 수준의 주요 차이점은 당신이 지적한 것처럼 델리게이트입니다.
답변
msdn.microsoft.com/en-us/library/ms836794.aspx에 제공된 링크를 참조하십시오. C #과 java의 유사점과 차이점을 모두 다룹니다.