Java String类深度解析

需积分: 9 1 下载量 186 浏览量 更新于2024-07-21 收藏 68KB DOCX 举报
"Java语言中的核心类`java.lang.String`详解" 在Java编程语言中,`String`类是表示字符序列的重要数据类型。它在Java类库中处于基础地位,几乎在所有程序中都会被广泛使用。这个类代表的是不可变的字符串,也就是说一旦创建,它的值就不能改变。字符串常量,比如`"abc"`,都是`String`类的实例。不可变性确保了字符串的安全性,使得它们可以在多线程环境下安全地共享。 `String`对象的创建通常有两种方式: 1. 直接使用字符串字面量,如`String str = "abc";` 2. 通过字符数组构造,如`char data[] = {'a', 'b', 'c'}; String str = new String(data);` 字符串的常见操作包括: - 输出:可以使用`System.out.println()`打印字符串,如`System.out.println("abc");` - 连接:通过`+`操作符可以连接两个字符串,如`String cde = "cde"; System.out.println("abc" + cde);` - 子串提取:`substring()`方法用于获取字符串的一部分,如`String c = "abc".substring(2, 3);`这将返回字符'c' - 搜索:`indexOf()`和`lastIndexOf()`方法可以查找特定字符或子串的位置。 - 截取:`charAt()`方法可以获取指定索引位置的字符。 - 比较:`equals()`和`compareTo()`方法用于比较字符串的相等性和顺序。 此外,`String`类还提供了许多其他方法,例如: - `length()`:返回字符串的长度。 - `trim()`:去除字符串两端的空白字符。 - `toUpperCase()`/`toLowerCase()`:将字符串转换为大写或小写。 - `replace(char oldChar, char newChar)`:替换字符串中所有出现的旧字符为新字符。 - `split(String regex)`:根据正则表达式分割字符串。 不可变性带来的一个重要影响是,如果需要频繁修改字符串内容,应该考虑使用`StringBuilder`或`StringBuffer`类,这两个类支持可变字符串,更适合在需要动态构建字符串的场景下使用。 `String`类的不可变性也意味着每次对字符串进行修改(如连接、替换等操作)都会生成一个新的`String`对象,这可能会导致性能上的开销,尤其是在大量字符串操作时。因此,在编写高性能的Java代码时,合理利用字符串不可变性和选择合适的字符串操作方法是至关重要的。 理解和熟练掌握`String`类的特性和方法对于编写高效、安全的Java代码至关重要。在实际编程中,开发者需要根据具体需求选择合适的方法来处理字符串,以达到最佳的性能和代码质量。

grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码

2023-05-26 上传

grant execute on dbms_crypto to system; -- 第一个代码块 declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw); decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; -- 第二个代码块 declare l_src_data varchar2(20); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_encval raw(2000); cursor secret_cursor is select phonenumber from customer; begin open secret_cursor; loop fetch secret_cursor into l_src_data; exit when secret_cursor%notfound; l_encval := dbms_crypto.encrypt(src => utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); dbms_output.put_line(l_encval); end loop; close secret_cursor; end; -- 第三个代码块 declare l_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad'); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_decval raw(200); begin l_decval := dbms_crypto.decrypt(src => l_src_data, typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; -- SQL 查询语句 SELECT Price FROM PRODUCT WHERE ProductID = 5;declare * ERROR at line 18: ORA-06550: line 18, column 1: PLS-00103: Encountered the symbol "DECLARE"报错

2023-05-26 上传