您好,欢迎访问一九零五行业门户网

java中string类是什么

java中string类的使用频率非常高,那让我们来看一下它到底是什么?
string是不可变对象
java.lang.string类使用了final修饰,不能被继承。java程序中的所有字面值,即双引号括起的字符串,如abc,都是作为string类的实例实现的。
string是常量,其对象一旦构造就不能再被改变。换句话说,string对象是不可变的,每一个看起来会修改string值的方法,实际上都是创造了一个全新的string对象,以包含修改后的字符串内容。而最初的string对象则丝毫未动。string对象具有只读特性,指向它的任何引用都不可能改变它的值,因此,也不会对其他的引用有什么影响。但是字符串引用可以重新赋值。
java字符串在内存中采用unicode编码方式,任何一个字符对应两个字节的定长编码,即任何一个字符(无论中文还是英文)都算一个字符长度,占用两个字节。
例子:
public class immutable {      public static string upcase(string s) {           return s.touppercase();      }      public static void main(string[ ] args) {           string str1= hello world;           system.out.println(str1);  //hello world           string str2 = upcase(str1);           system.out.println(str2);  //hello world           system.out.println(str1);  //hello world     }}
当把str1传递给upcase()方法时,实际传递的是引用的一个拷贝。其实,每当把string对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
string常量池
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串。对于重复出现的字符串直接量,jvm会首先在常量池中查找,如果常量池中存在即返回该对象。
例2:
public class test1 {    public static void main(string[] args){        string str1 = hello;        //不会创建新的string对象,而是使用常量池中已有的hello,        string str2 = hello;        system.out.println(str1 == str2); //true        //使用new关键字会创建新的string对象        string str3 = new string(hello);        system.out.println(str1 == str3); //false     }}
以上就是java中string类是什么的详细内容。
其它类似信息

推荐信息