javase---string类介绍01

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一、String类简介

java.lang.String类用于描述一个字符序列。String类是不可变对象的类。其对象一旦被创建,永远无法改变。但是对象的引用可以重新赋值。而且String类被final关键字修饰,其本身不能被继承。String类内部封装了字符数组以及针对字符数组操作的相关算法。

二、关于String类是不可变对象的几点解释

1、经常使用String类作为方法的参数,为了保证方法的调用正确,要求字符串内容不可以改变

2、出于内存的考虑,重用在开发中远比修改多得多。所以Java在重用字符串的时候没有新建新对象,而是都引用同一个。这就要求字符串内容不可变。出于性能的考虑,JVM会将静态字符串(字面量/常量/常量连接的结果)在常量池中创建。并尽量使用同一对象重用静态字符串。对于重复出现的静态字符串,JVM会首先在常量池中查找,如果存在即返回该对象。不存在则创建。

publicstaticvoidmain(String[] args){/*** 当我们使用字符串字面值创建字符串对象时,

* 虚拟机会首先在常量池中查找,如果存在即返回该对象*/String str1= "hello";//字符串 类创建对象的时候不需要newString str2 = "hello";

String str3= "hello";

String str4=newString("hello");

System.out.PRintln(str1== str2);//使用==比较字符串的时候比较的是地址,而不是内容。System.out.println(str1 ==str3);

System.out.println(str1== str4);//falseSystem.out.println(str1.equals(str4));//true//使用equals方法比较的是字符串中的内容}

str2,str3不会创建新的对象,而是使用常量池中已有的Hello。str4使用new关键字会创建一个新的对象。

三、编译器对字面值量的优化

编译器在编译源文件的时候若发现表达式的两边都是常量的话,会先进行计算,在将结果生成到字节码文件中去。所以jvm运行.class文件的时候。下面的内容应该是这样的。

String str5 = "123"+"abc";//编译器先进行运算String str5 = "123abc";

String s= "123";//编译器不运算,因为s是变量String str6 = s + "abc";

四、String类在内存中采用Unicode编码,每个字符在内存中都占用两个字节(不管中英文)。而且每个字符的长度都是1(不管中英文)。

publicstaticvoidmain(String[] args) {

String str= "好好努力,学好java";

System.out.println(str.length());//11}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航