[[여기에 좋은 답변이 있지만 아직 정보가 부족한 것 같습니다. ]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
당신이 지적한 바와 같이, 당신이 제시하는 예는 단순하지만 어쨌든 그것을 분석해 봅시다. 여기서 일어나는 일은 컴파일러가 실제로 모든 상수 +
이기 때문에 여기서 작업을 수행한다는 것 "select id1, " + " id2 " + " from " + " table"
입니다. 그래서 이것은 다음과 같이 변합니다.
return new StringBuilder("select id1, id2 from table").toString();
이 경우 분명히 StringBuilder
. 다음을 수행하는 것이 좋습니다.
return "select id1, " + " id2 " + " from " + " table";
그러나 필드 또는 기타 비 상수를 추가하는 경우에도 컴파일러는 내부를 사용하므로 StringBuilder
정의 할 필요가 없습니다.
return "select id1, " + fieldName + " from " + tableName;
내부적으로 이것은 대략 다음과 같은 코드로 바뀝니다.
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
실제로 StringBuilder
직접 사용해야하는 유일한 시간 은 조건부 코드가있을 때입니다. 예를 들어, 다음과 같은 코드는 a에 절실합니다 StringBuilder
.
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
query += ' ' + where;
}
+
첫번째 라인의 사용은 하나의 StringBuilder
예입니다. 그런 다음 +=
다른 StringBuilder
인스턴스를 사용 합니다. 다음을 수행하는 것이 더 효율적입니다.
StringBuilder sb = new StringBuilder(64);
sb.append("select id1, ").append(fieldName).append(" from ").append(tableName);
if (where != null) {
sb.append(' ').append(where);
}
return sb.toString();
a를 사용하는 또 다른 시간 StringBuilder
은 여러 메서드 호출에서 문자열을 만들 때입니다. 그런 다음 StringBuilder
인수 를받는 메서드를 만들 수 있습니다 .
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
를 사용하는 경우 동시에 StringBuilder
의 모든 사용을 관찰해야합니다 +
.
sb.append("select " + fieldName);
그러면 +
다른 내부 StringBuilder
가 생성됩니다. 물론 이것은 다음과 같아야합니다.
sb.append("select ").append(fieldName);
마지막으로 @TJrowder가 지적했듯이 항상 StringBuilder
. 이렇게하면 char[]
내부 버퍼의 크기를 늘릴 때 생성되는 개체 수가 절약됩니다 .
PreparedStatement
또는 유사한 것을 사용하십시오 . docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html