前言
java新手上路,在参考工程中, 看见char的赋值很怪,记录一下。
实验
动态调试, 才知道char类型是双字节的.
在java中可以使用8进制,10进制,16进制.
工程中出现8进制,也许是反编译软件风格的问题。真正工程中,没人用8进制来赋值吧?
16进制的写法也有2种, 可以使用C风格的16进制赋值.
private static int stringUTF8Length(char ary_char[])
{
// eclipse的重构功能真好用, 重构完, 可以继续调试
int i_length = 0;
int i = 0;
int j = ary_char.length;
char c_tmp = 0;
// https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
//
// char: The char data type is a single 16-bit Unicode character.
// It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).
//
// '\177' 是8进制 = 0x7f
// '\u07FF' 是16进制 0x7ff, 用C风格的0x7ff赋值, 看的更习惯
// 不喜欢8进制的赋值, 看不懂(必须用计算器了)
for (i = 0; i < j; i++) {
c_tmp = ary_char[i];
if ((c_tmp >= 0) && (c_tmp <= 0x7f)) {
i_length++;
} else if ((c_tmp >= 0x80) && (c_tmp <= 0x7ff)) {
i_length += 2;
} else {
i_length += 3;
}
}
return i_length;
}
类的域作用符
c++里面是::
java里面是.
public class OracleStatement
implements oracle.jdbc.internal.OracleStatement, ScrollRsetStatement
{
// ...
public static final int SQL_KIND_SELECT_OR_WITH = 0;
public static final int SQL_KIND_BEGIN_OR_CALL_OR_DECLARE = 1;
public static final int SQL_KIND_INSERT_OR_DELETE_OR_UPDATE = 2;
public static final int SQL_KIND_CONTROL = 3; // e.g. alter
// ...
}
// 引入常量所在类的头文件
import oracle.jdbc.driver.OracleStatement;
// 使用另外一个类中定义的常量
public synchronized int parseExecuteFetch(DBStatement dbstatement, byte sql_kind, byte array_sql[], DBDataSet binds_in, int i, DBDataSet binds_out, int j)
throws SQLException, IOException
{
DBType adbtype[] = null;
DBData adbdata[] = null;
DBType adbtype1[] = null;
DBData adbdata1[] = null;
if(binds_in != null)
{
adbtype = ((DBDataSetImpl)binds_in).getDBTypes();
adbdata = ((DBDataSetImpl)binds_in).getDBData();
}
if(binds_out != null)
{
adbtype1 = ((DBDataSetImpl)binds_out).getDBTypes();
adbdata1 = ((DBDataSetImpl)binds_out).getDBData();
}
if (dbstatement == null
|| array_sql == null
|| sql_kind < OracleStatement.SQL_KIND_SELECT_OR_WITH
|| sql_kind > OracleStatement.SQL_KIND_CONTROL)
{
DBError.check_error(433);
}
// ...