java字符串情况下,n+=和s1+s2之间的差异
我需要编写更长的查询,这些查询是动态生成的,并附加到字符串变量中java字符串情况下,n+=和s1+s2之间的差异,java,string,concatenation,Java,String,Concatenation,我需要编写更长的查询,这些查询是动态生成的,并附加到字符串变量中 String str = ""; str +="select * from"; str+=" users where userid = 1"; 我想知道下面是做同样的事情还是只做一个实例 String str = "select * from "+" users where userid = 1"; 两个实例都创建多个字符串 如果需要构建查询字符串,只需使用 为了完整性起见,请检查您是否自己构造SQL查询。如果只是文
String str = "";
str +="select * from";
str+=" users where userid = 1";
我想知道下面是做同样的事情还是只做一个实例
String str = "select * from "+" users where userid = 1";
两个实例都创建多个字符串 如果需要构建查询字符串,只需使用
为了完整性起见,请检查您是否自己构造SQL查询。如果只是文本,编译器可能会对此进行优化,但如果不是,字符串上的每个+操作都会创建一个中间实例。事实上,a+=b只是将a=a+b写入编译器的一种简单方式,对编译器来说也是一样的
顺便说一句,我有一种强烈的感觉,您希望将值连接到查询中。如果可以,请避免这种情况,因为它可能会引入严重的安全问题SQL注入。用PreparedStatement代替。从语义角度看s+=s1;s=s+s1;都是一样的 JLS 15.26.2。说: 形式为E1 op=E2的复合赋值表达式相当于E1=T E1 op E2,其中T是E1的类型,但E1只计算一次 在这种情况下:
s += s1;
变成
s = (String) ((s) + (s1));
这是什么
s = s + s1;
删除多余的类型转换和括号时
但是,您的示例(而不是问题标题)是关于字符串>>文本的在构建查询时,您需要备份并使用准备好的语句,否则可能会受到SQL注入攻击
话虽如此,使用StringBuilder是一个不错的选择,但也可以尝试在顶部使用重用的字符串常量,这样您就不会经常在循环中创建它们。谢谢。但我的第二个代码不是a=a+b,而是我想要的a=b+cknow@KevinEsche在问题的上下文中,应该清楚字符串的含义,但无论如何,我添加了字符串以供澄清。Thx的提示。这不是allI的问题,我还要加上s=s+s1;本质上变为s=新StringBuilders.appends1.toString@肉桂-这是一个实现细节。编译器是>>允许的>必需的
s = s + s1;
"select * from " + " users where userid = 1";