C\#일반적인 연산 자 정리
4847 단어 조작 부호
postfix operators
[] . (params) expr++ expr--
unary operators
++expr --expr +expr -expr ~ !
creation or cast
new (type)expr
multiplicative
* / %
additive
+ -
shift
<< >> >>>
relational
< > <= >= instanceof
equality
== !=
bitwise AND
&
bitwise exclusive OR
^
bitwise inclusive OR
|
logical AND
&&
logical OR
||
conditional
? :
assignment
=+=-=*=/=%=&=^==<<=>=>>=주:위의 조작 수 우선 순 위 는 위 에서 아래로 순서대로 낮 아 지고 같은 칸 안의 우선 순 위 는 같 습 니 다.우 리 는 연산 자의 순 서 를 잊 어 버 릴 수 있 으 므 로 괄호 로 연산 순 서 를 명확 하 게 정 해 야 합 니 다.
public class Precedence{
public static void main(String [] args){
int x=1,y=2,z=3;
int a=x + y C 2 / 2 + z;
int b=x + ( y C 2 ) / ( 2 + z );
System.out.println(“a =” + a + “b=”+b);
}
}
출력 a=5b=1 출력 문장의+는 이러한 상하 문 환경 에서'문자열 연결'을 의미 하고 필요 하 다 면'문자열 변환'을 실행 해 야 한다.컴 파 일 러 가 String 뒤에'+'가 들 어 가 는 것 을 관찰 하면 이'+'의 뒤에 String 형식 이 아 닌 요소 가 붙 어 있 을 때 이 String 형식의 요 소 를 String 형식 으로 변환 하려 고 시도 합 니 다."할당 할당 연산 자"="그의 의 미 는 오른쪽 값(오른쪽 값)을 가 져 와 왼쪽(왼쪽 값)에 복사 하 는 것 입 니 다.오른쪽 값 은 상수,변수,표현 식 또는 값 을 만 들 수 있 는 방법 일 수 있 습 니 다.그러나 왼쪽 은 명확 한 이름 을 가 진 변수 여야 합 니 다.등호 오른쪽 값 을 저장 할 수 있 는 방 공간 이 있어 야 한 다 는 것 이다.예 를 들 어 하나의 상수 대 가 를 변수 a=4 에 부여 할 수 있 지만 그 어떠한 것 도 상수 에 부여 할 수 없고 상 수 는 왼쪽 값 4=a 로 성립 되 지 않 습 니 다.기본 형식 데 이 터 는 실제 수 치 를 저장 합 니 다.한 대상 을 가리 키 는 인용 이 아니 라 값 을 부여 할 때 한 곳 의 내용 을 다른 곳 으로 복사 합 니 다.예 를 들 어 기본 데이터 형식 은 a=b 를 사용 하 는데 실제 의 미 는 b 의 내용 을 a 에 복사 하 는 것 이다.만약 에 나중에 a 에 게 새로운 할당 b 에 영향 을 받 지 않 는 다.그러나 모든 할당 이 이런 기대 에 부 응 하 는 것 은 아니다.대상 에 게 할당 작업 을 할 때 사실은 우리 가 조작 하 는 것 은 대상 의 인용 이다.따라서 만약 에 우리 가 한 대상 을 다른 대상 에 게 할당 하 는 것 이 실제 적 으로'인용'을 한 곳 에서 다른 곳 으로 복사 하 는 것 이 라면 이것 은 우리 가 그 중의 한 대상 값 과 동시에 다른 하 나 는 이것 과 변화 가 생 긴 다 는 것 을 의미한다.
class Tank{
int level;
}
public class Assignment{
public static void main(String [] args){
Tank t1=new Tank();
Tank t2=new Tank();
t1.level=9;
t2.level=47;
System.out.print(“1: t1.level” +t1.level+”,t2.level”+t2.level);
t1 = t2;
System.out.print(“2: t1.level” +t1.level+”,t2.level”+t2.level);
t1.level=27;
System.out.print(“3: t1.level” +t1.level+”,t2.level”+t2.level);
}
}
출력 1:t1.level:9,t2.level:47;2:t1.level: 47,t2.level:47; 3:t1.level:27,t2.level:27; 이 예 에서 조작 인용 문제 가 발생 했 습 니 다.우 리 는 t1 을 수정 하 는 동시에 t2 도 수정 되 었 습 니 다.대부분의 경우 우 리 는 t1 과 t2 가 서로 독립 되 기 를 바 랍 니 다.그러나 할당 작업 은 하나의 대상 의 인용 이기 때문에 여기 t1 과 t2 는 같은 인용 을 포함 하고 똑 같은 대상(원래 t1 에 포 함 된 대상 에 대한 인용,지향 값 이 9 인 대상 입 니 다.t1 할당 할 때 이 인용 은 덮어 쓰 였 습 니 다.즉,잃 어 버 렸 습 니 다.더 이상 인용 되 지 않 는 대상 은 쓰레기 회수 기 에서 자동 으로 청 소 됩 니 다.이런 특수 한 현상 을 통상 적 으로'별명 현상'이 라 고 부 르 는데 자바 조작 대상 의 기본 적 인 방식 이다.이 예 에서 별명 을 피 하려 면 대상 의 값 을 직접 조작 해 야 합 니 다.t1.level=t2.level;이렇게 쓰 면 두 대상 의 독립 을 유지 할 수 있 지만 대상 을 직접 조작 하 는 도 메 인 은 혼란 을 초래 하기 쉬 우 며 대상 을 대상 으로 하 는 프로그램 설계 의 원칙 에 위배 된다.다음 예 는 방법 호출 중의 별명 문제
class Letter{
char c;
}
public class PassObject{
static void f(Letter y){
y.c='z';
}
public static void main(String [] args){
Letter x=new Letter();
x.c='a';
System.out.print(“1: x.c ” + x.c);
f(x);
System.out.print(“2: x.c” + x.c);
}
}
출력 1:x.c:a 2:x.c:z 를 소개 합 니 다.우 리 는 f 방법 을 사용 할 때 그 역할 영역 에서 그 매개 변수 인 Letter y 의 사본 을 복사 하 는 것 같 습 니 다.그러나 실제로는 인용 만 전달 했다.그래서 코드 줄 y.c='z';실제 변 화 된 것 은 f()이외 의 대상 이다.기타 할당 연산 자Operator
Use
Equivalent to
+=
op1 += op2
op1 = op1 + op2
-=
op1 -= op2
op1 = op1 - op2
*=
op1 *= op2
op1 = op1 * op2
/=
op1 /= op2
op1 = op1 / op2
%=
op1 %= op2
op1 = op1 % op2
&=
op1 &= op2
op1 = op1 & op2
|=
op1 |= op2
op1 = op1 | op2
^=
op1 ^= op2
op1 = op1 ^ op2
<<=
op1 <<= op2
op1 = op1 << op2
>>=
op1 >>= op2
op1 = op1 >> op2
>>>=
op1 >>>= op2
op1 = op1 >>> op2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript 에서 new 연산 자의 원리 예제 상세 설명new 의 역할 은 구조 함 수 를 통 해 인 스 턴 스 대상 을 만 드 는 것 입 니 다.이 인 스 턴 스 와 원형 과 구조 함수 간 의 관 계 는 다음 그림 과 같 습 니 다. 빈 대상 은 Object 의 인 스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.