자바로 2 차원 게임을 만들려고합니다.자바에서 매개 변수로 객체를 전달합니다.
프로세스에서 나는 많은 객체가 경계 (x1, x2, y1, y2)를 필요로한다는 것을 곧 알게되었고 결과적으로 많은 메소드에 매개 변수 (int x1, int x2, int y1, int y2)가있었습니다.
그래서 저는 도대체 왜 getWidth(), getHeight()와 같은 유용한 메소드와 함께 속성 x1, x2, y1, y2 (퍼포먼스 향상을 위해 public으로 설정 한)을 가진 IntRectangle 객체를 만들지 않을까요?() 등등.
내 코드는 훨씬 더 깨끗하며 변수가 공개되어 있으므로 많은 성능을 잃지 않았습니다.
메소드에 원시 값을 전달하는 것과 달리, 전달 된 객체의 값이 메소드에서 변경되었을 때 변경되었습니다. 이 코드 라인 (10)을 인쇄하지만 목적으로 유용한 프리미티브 값
`int x = 10;`
subtract5(x);
print(x);
void subtract5(int i){
i -= 5;
}
으로 예컨대
...
class XY{
public int X;
public int Y;
}
main {
XY xy = new XY();
xy.X = 5;
xy.Y = 10;
changeX (xy);
print xy.X
}
changeX (XY xy2){
xy2.X = 7;
}
그것은 7 인쇄;
제가 개발 한 이론은 int가 int에 대한 포인터가 아니라 레지스터에 저장된 int입니다. 메서드가 호출 될 때 푸시되고 리턴 될 때 되돌릴 수 있습니다. 객체는 객체에 대한 참조입니다. 객체 자체는 스택에 푸시되지 않고 포인터만으로 푸시됩니다.
하지만이 문자열에 피곤했습니다 (내가 아는 것은 객체라는 것을 알고 있습니다). 그리고 나는이 문제의 int처럼 행동합니다. 이것은 혼란 스럽습니다. 어쩌면 그들은 어쨌든 스스로 사본을 만들 수 있을까요?
글쎄, 누군가가이 문제에 대해 밝히고 내 추론이 잘못된 방향으로 돌아가고 내 코드를 정리하고 성능을 유지하는 방법에 대해 조언을 해주길 바란다.
귀하의 이론은 정확합니다. 그러나 문자열은 일반적인 객체입니다. int와 같이 동작하는 문자열의 예를 하나 제시하십시오. – immibis
문자열은 객체이지만 또한 불변이므로 문자열을 변경할 수 없습니다. –
BTW, 퍼포먼스에 문제가 있다는 것을 안다면 * 깨끗한 코드를 희생하지 마십시오. getter/setter를 사용하지 않으면 성능면에서 아무런 이득도 얻지 못하지만 많은 유연성을 잃게됩니다. –