그냥 이렇게 구축하십시오 http://support. 일부 sql 쿼리 내 프로젝트:
return (new StringBuilder("select id1, " + " id2 " + " from " + " table")).toString();
이 목표를 달성하는 이리에 스트라이베이더 ',' 는 메모리 사용량 줄이기?
return "select id1, " + " id2 " + " from " + " table";
모두 명령문입니다 자가 메모리 사용량 방관하겠나? 제발 해명했다.
미리 감사합니다!
편집:
브트와, 내 코드의 아니다. 그 com/downloads/global/corporate/iar/esg_prosupport. 늙은 프로젝트. 또 아직 내 작은 질의입니다 한 예다. )
>. 메모리를 사용하여, 이리에 스트라이베이더 줄일 수 있다. 그것은 달성됩니다?
절대로 그렇지 않다. 그 코드를 사용하지 않는 '제대로' 스트라이베이더. (# 39, ve 잘못 인용, 이 표시되어도 you& 생쥐라. 안에는 작은 따옴표로 'id2 aren& # 39, t' 와 '표'?)
참고로, aim (일반적으로) 가 아닌 메모리 사용량을 줄이기 위해 전체 가입자 이탈을 메모리를 생활이 조금 더 http://cowcast. creativecow. 쓰레기요 모음기.
>. 아래와 같은 문자열 시행하십시오 사용하는 메모리 비유하 하는 것입니다.
아니, it& # 39 더 이상 말을 인용, ll, 이로 인해 메모리 양산한다는 그냥 직선입니다 concat 있습니다. (보살피되 / 한 JVM 최적화기 볼 수 있는 명시성 '스트라이베이더' 는 불필요한 코드의 경우 및 최적화하므로 아웃해야 수 있습니다.)
저자는 '스트라이베이더 의 경우 해당 코드를 사용할 수 있다' (물론 아니했으니 인수에 대해 있습니다. 이 질문에 말 주 참조), 더 나은 이를 제대로 (여기서는 I& # 39, m 가정 좁히어 aren& # 39, 실제로 't' 와 '표' 작은 따옴표로 id2):
StringBuilder sb = new StringBuilder(some_appropriate_size);
sb.append("select id1, ");
sb.append(id2);
sb.append(" from ");
sb.append(table);
return sb.toString();
참고로 ',' 를 've 나열되는지 I& # 39 some_appropriate_size 스트라이베이더' 구성자를 도왔으매 먼저 충분한 용량, re going out with 전체 콘텐츠 we& # 39 첨부하려면. # 39 는 don& 지정할 경우 기본 사용된 크기, t [16 자] [1] 스트라이베이더 너무 작고, 대개 결과 자체를 할 수 있도록 큰 재 할당 '필요' (이어스, in the Sun / Oracle JDK 얻게된다면 복식 자체가 [이상의 경우 계시나니 it 더 필요한 특정 '덮어쓰기/추가 만족시킬 수 있는'] 실행될 때마다 아웃오브밴드 (룸).
return "prefix " + variable1 + " middle " + variable2 + " end";
이 구체화합니다 대략 다음과 같이 사용된다.
StringBuilder tmp = new StringBuilder(); // Using default 16 character size
tmp.append("prefix ");
tmp.append(variable1);
tmp.append(" middle ");
tmp.append(variable2);
tmp.append(" end");
return tmp.toString();
그래서 that& # 39 의 그땅은, 비록 기본 구성자를 백업본과 이후의 reallocation %hsmb isn& # 39, t, s # 39 는 좋은 enough& it& 가능성을 갖추고, nbsp; & mdash;; 및 연결 더 많이 읽을 수 있다.
그러나 that& # 39 에 대해서만 단일 표현식입니다. 이를 위해 여러 '스트라이베이더 의 사용됩니다.
String s;
s = "prefix ";
s += variable1;
s += " middle ";
s += variable2;
s += " end";
return s;
이 같은 일이 끝나는 백업하도록 되었다.
String s;
StringBuilder tmp;
s = "prefix ";
tmp = new StringBuilder();
tmp.append(s);
tmp.append(variable1);
s = tmp.toString();
tmp = new StringBuilder();
tmp.append(s);
tmp.append(" middle ");
s = tmp.toString();
tmp = new StringBuilder();
tmp.append(s);
tmp.append(variable2);
s = tmp.toString();
tmp = new StringBuilder();
tmp.append(s);
tmp.append(" end");
s = tmp.toString();
return s;
매우 드와이치 않았다는거지
[1]: http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html # StringBuilder% 28%29
이미 때 모든 " pieces"; 프로파일링하려는 덮어쓰기/추가 시점으로든지 스트라이베이더 사용하여 '없다' 는 '전혀. 스트라이베이더 사용하여 연결 문자열을 따라 '' 와 같은 호출하십시오 너회의 샘플 코드는 더욱 악화되어 있다.
이 낫겠다.
return "select id1, " + " id2 " + " from " + " table";
이 경우 연결 문자열을 실제로 happening at # 39 에 해당하는 컴파일 타임 어쨌든 그래서 it& 심지어 간단해진다는:
return "select id1, id2 from table";
'새 스트라이베이더 () 를 사용하여 지아펜드 (" id1 선택, ";) 지아펜드 (". id2 ") () '은 실제로 네스토스트링 성능 때문에 이 경우 사탄들이 실행 시간 동안 연결 대신 수행할 emc. emc. 컴파일하십시오 하게하면서요. 수갑차
이 경우 실제 코드는 건물 값이 질의 (query) 를 포함하여 sql 쿼리를 문제점, 즉 다른 별도의 어졌다면 that& # 39 의 패라메트릭화 쿼리합니다 specifying 의 값을 사용해야 합니다, 대신 매개변수입니다 sql 에서.
나는 ui_policytable_java_spe_policy 'String' / '' 기사를 스트라이버퍼 스트라이베이더 '-' 어떤 난 몇년 전에 작성했습니까 함께 나왔다. 이 원칙을 적용하십시오 스트라이베이더 '' 같은 방식으로 어쨌든요
[[몇 가지 좋은 여기에 대답을 하지만 난 아직도 조금 정보가 부족한 것을 알 수 있습니다.]]
return (new StringBuilder("select id1, " + " id2 " + " from " + " table"))
.toString();
그래서 이 지적하고 있듯이, 상투적이고 let& 분석하고 있지만, s # 39 는 들어 줄 겁니다. 다음은 실제로 무슨 일이 있어서 여기 ',' + '를 선택한 compiler 높여줍니까 작동합니까 " id1 ". + ". id2 ". + ". 충스러웠으니 ". + ". table", '모두 상수입니다. 이렇게 바뀝니다.
return new StringBuilder("select id1, id2 from table").toString();
이 경우, 분명히 시점으로든지 스트라이베이더 사용하여 '없다'. 뿐만 아니라 할 수 있습니다.
// the compiler combines these constant strings
return "select id1, " + " id2 " + " from " + " table";
그러나 어떠한 경우에도 추가 또는 기타 비사양 상수입니다 조교하실 필드용 internal there& '-' 스트라이베이더 의 다음 컴파일러 사용해야 할 필요 없이 # 39 정의하십시오 수 있습니다.
// an internal StringBuilder is used here
return "select id1, " + fieldName + " from " + tableName;
이 같은 코드, 즉 약 닫히지만 따라 바뀝니다.
StringBuilder sb = new StringBuilder("select id1, ");
sb.append(fieldName).append(" from ").append(tableName);
return sb.toString();
정말 사용해야 할 때 '유일한' directly 스트라이베이더 경우 조건 코드. 예를 들어, 다음과 같은 코드를 보이는 '는 절박한 kingdome. seattle. 스트라이베이더':
// 1 StringBuilder used in this line
String query = "select id1, " + fieldName + " from " + tableName;
if (where != null) {
// another StringBuilder used here
query += ' ' + where;
}
'+' 는 '한' 의 첫 번째 줄의 스트라이베이더 인스턴스입니다. '다음' + '=' 는 다른 스트라이베이더 인스턴스입니다. 보다 효율적으로 할 수 있다.
// choose a good starting size to lower chances of reallocation
StringBuilder sb = new StringBuilder(64);
sb.append("select id1, ").append(fieldName).append(" from ").append(tableName);
// conditional code
if (where != null) {
sb.append(' ').append(where);
}
return sb.toString();
I 'm' 은 다른 시간을 사용할 때, 건물 스트라이베이더 I& # 39 에서 문자열으로 여러 가지 방법이 있다. 그럼 내가 메서드입니다 시행하십시오 스트라이베이더 'a' 로 만들 수 있는 것이다.
private void addWhere(StringBuilder sb) {
if (where != null) {
sb.append(' ').append(where);
}
}
'A' 를 사용할 때 스트라이베이더 의 '+' 동시에 감시하는 모든 사용 합니다.
sb.append("select " + fieldName);
생길 수 있는 '+' 다른 '내부' 스트라이베이더 만들 수 있습니다. 그러면 당연히 다음과 같이 쓸 수 있다.
sb.append("select ").append(fieldName);
마지막으로 @T.J.rowder 점 때문에, 항상 '' 스트라이베이더 의 크기를 com/go/learn_fl_tutorials_kr 추정합니다. 이렇게 하면 챨 [] '때' 수에 대한 내부 크기는 작성된 객체에는 성장하는 것을 의미한다.
올바른 사용 목적을 달성할 수 있는 있지 못하고 있는 틀렸다니까 구체화하십시오 구성기는 전혀 의 완전한 유사했다.
그러나 볼 때, '를 선택한 컴파일러와의 표현식에서는 " id1 ". + ". id2 ". + ". 충스러웠으니 ". + ". 'a', '이 실제로 만드는 코드를 table" 발생시킬 수 있는 배경 지식 및 첨부됩니다 스트라이베이더 때문에 결과적으로 파트랠 그리 나쁘지 않은 편이다.
물론 누구나 그 코드를 보는 것 같은 뒤처진 것은 수밖에 없다.
코드에서, 이 때 잘못 스트라이베이더 장이점이 게시하기를 없을 것이라고 합니다. 두 경우 모두 동일한 문자열이어야 제작합니다. '+' 연산을 사용하여 문장열 스트라이베이더 사용하여 면할 수 있습니다 '덮어쓰기/추가' 메서드입니다. 콩지름에 it this way.
return new StringBuilder("select id1, ").append(" id2 ").append(" from ").append(" table").toString();
자바 가상 머신 (jvm) 에 있는 두 개의 문자를 문자열의 유형은 e0100042.log 인무터블 추가했는지 외면하였나니 새로운 가치를 제공하는 피연산자로 vm tcpg 문장열 문자열이어야 모두 연결된.
Mutable) 는 일련의 문자를 스트라이베이더 concat 데 사용할 수 있는 다른 값 또는 변수를 문자열 객체를 만들지 않고, 때로는 문장열 작업하는 것보다 더 효율적으로 사용할 수 있는 새로운 그렇게
이를 통해 몇 가지 유용한 기능, 콘텐츠 등 다른 방법을 변경하는 것과 챨 조합으 can& 어떻게 처리해야 하는 지 매개변수입니다 인사이드라면 써줬지 t # 39.
private void addWhereClause(StringBuilder sql, String column, String value) {
//WARNING: only as an example, never append directly a value to a SQL String, or you'll be exposed to SQL Injection
sql.append(" where ").append(column).append(" = ").append(value);
}
자세한 정보 dell. http://docs.oracle.com/javase/tutorial/java/data/buffers.html