java基础系列(三)之--java字符串
来源:互联网 发布:好桌道软件下载 编辑:程序博客网 时间:2024/05/29 14:55
字符串String
- 所在包:java.lang.String
- 类修饰 :public final class String implements java.io.Serializable, Comparable, CharSequence
- 成员变量:
- private final char value[];
- private int hash; // Default to 0
- private static final long serialVersionUID = -6849794470754667710L;
- private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];
- 常用构造方法:
- public String() {
this.value = “”.value;
} - public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
- public String() {
理解:
final修饰
- final修饰的类不能被继承。只能用,不用继承
final不仅可以修饰类,还可以修饰变量,被final修饰的变量就是一个常量,只能赋值一次 - 所以String类是不能继承的,而且通过String的构造方法可以看出,new String 操作产生的变量也是final修饰的,所以: String类是不可变的(final),对String类的任何改变,都是返回一个新的String类对象。
- final修饰的类不能被继承。只能用,不用继承
String池机制
- 上文讲了Sting是由final修饰而且String的成员变量也由fianl修饰,导致new String每次都会产生新的对象在内存中开辟新的空间,然而这样是不够的,大神们对String进行优化,最重要就是String池机制:
- String是不可改变的,为了提高效率Java引用了字符串池的概念,例如new String(“abc”);首先会在 String池中创建一个对象“abc”,因为有NEW的存在所以会分配地址空间copy String池的内容。当出现的String对象在String池中不存在时即在String池中创建该对象。
- 解释一下:为什么使用池机制,这里优化这块就不多说了,说说引用和变量的生命周期,一个类的引用的生命周期:在初始化一个类的实例的时候,会经过一系列过程,不多说了,将这个类的实例创建,并在内存中开辟空间保存,类的引用会保存在一块内存区域(栈区),而产生的实例内容保存在(堆区),当引用的指向有内容时,jvm就会认为这个引用还有用,当引用的指向没有内容也就是null时,jvm认为它是个垃圾就回收了。所以有这么个前提下,池在可能被使用,因为你之前创建的内容都会存活在内存中,并没有死去,为了节省空间和创建过程花费的时间,就诞生了池技术,这个还是很强大的,后期可以延伸到request–>data(if(缓存存在)返回缓存的内容 else(查数据库) )—这样就节省了,数据库连接的创建和查询和返回的时间和开支,极大的提升了系统性能。下面附代码:
public static void main(String[] args) { String str="123"; System.out.println(str); String str2=new String(str); String str3=new String("123"); System.out.println(str2); System.out.println("hashcode:"+str.hashCode()); System.out.println("hashcode:"+str2.hashCode()); System.out.println("hashcode:"+str3.hashCode()); System.out.println(str3); str2=null; System.out.println(str2); System.out.println(str3); System.out.println("hashcode:"+str.hashCode()); System.out.println("hashcode:"+str3.hashCode());}
- 上文讲了Sting是由final修饰而且String的成员变量也由fianl修饰,导致new String每次都会产生新的对象在内存中开辟新的空间,然而这样是不够的,大神们对String进行优化,最重要就是String池机制:
2 0
- java基础系列(三)之--java字符串
- java基础系列(三)
- java基础(三),字符串
- 【Java系列】(三)Java多线程---基础
- java基础系列之三:java的面向对象程序设计
- Java系列之字符串
- Java基础系列三、数组
- Java基础复习系列三
- Java菜鸟面试突破系列之Java基础方面(三)
- Java基础之字符串
- Java基础之字符串
- JAVA基础之字符串
- JAVA ProgressBar系列之三
- Java之------socket系列(三)
- Java基础之面向对象(三)
- java基础巩固之IO(三)
- java基础(三)之数据类型
- Java基础之(三) 函数
- linux消息队列
- Python实现简单的斐波拉切数列计算
- MyCnCart
- 访问局域网内SVN?花生壳内网穿透软件需三步
- 可变参数列表
- java基础系列(三)之--java字符串
- Android 改变View位置 setLeft、etRight、setTop、setBottom等在API 11以下的替代方法
- java自适应响应式 企业网站源码 SSM 生成静态化 手机 平板 PC
- centos7安装openvswitch虚拟交换机
- 位置和传感器:位置策略
- expdp中出现的错误
- java中的关键字和标识符
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- oracle 异库恢复