javase---string类介绍01
一、String类简介
java.lang.String类用于描述一个字符序列。String类是不可变对象的类。其对象一旦被创建,永远无法改变。但是对象的引用可以重新赋值。而且String类被final关键字修饰,其本身不能被继承。String类内部封装了字符数组以及针对字符数组操作的相关算法。
二、关于String类是不可变对象的几点解释
1、经常使用String类作为方法的参数,为了保证方法的调用正确,要求字符串内容不可以改变
2、出于内存的考虑,重用在开发中远比修改多得多。所以Java在重用字符串的时候没有新建新对象,而是都引用同一个。这就要求字符串内容不可变。出于性能的考虑,JVM会将静态字符串(字面量/常量/常量连接的结果)在常量池中创建。并尽量使用同一对象重用静态字符串。对于重复出现的静态字符串,JVM会首先在常量池中查找,如果存在即返回该对象。不存在则创建。
public static void main(String[] args){
/**
* 当我们使用字符串字面值创建字符串对象时,
* 虚拟机会首先在常量池中查找,如果存在即返回该对象
*/
String str1 = "hello";//字符串 类创建对象的时候不需要new
String str2 = "hello";
String str3 = "hello";
String str4 = new String("hello");
System.out.println(str1 == str2);//使用==比较字符串的时候比较的是地址,而不是内容。
System.out.println(str1 == str3);
System.out.println(str1 == str4);//false
System.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(不管中英文)。
public static void main(String[] args) {
String str = "好好努力,学好java";
System.out.println(str.length());//
}
javase---string类介绍01的更多相关文章
- C++字符串和string类介绍
一.C风格字符串 ◆ 1.字符串是用字符型数组存储的,字符串要求其尾部以'\0'作为结束标志.如: char string[ ]="C++ programming language&q ...
- Java进阶01 String类
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...
- 全面深入介绍C++字符串:string类
http://blog.csdn.net/liuliming3000/article/details/1809385 1 从C到C++ string类 2 string类的构造函数 3 string类 ...
- c++string类的简单介绍
#include "iostream" #include "string" using namespace std; /*@author:浅滩 *family: ...
- string类总结第一部分函数介绍
在前面几章,看了整个String类的源码,给每个方法都行写了注释,但是太过凌乱,今天我就把String类的方法整理归纳,然后再讲一下String类比较难以理解的部分 特此声明:本文篇幅较大,涵盖知识点 ...
- JavaSE学习笔记(5)---内部类和String类
JavaSE学习笔记(5)---内部类和String类 一.内部类基础 转自菜鸟教程 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来 ...
- [005] - JavaSE面试题(五):String类
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [005] - JavaSE面试题(五):String类 第1问:String.StringBuf ...
- 01.String类字符串本质
String类是在java开发过程中,使用最最频繁的一个类,不管是 用户名 密码 还是http报文接收过来的数据,其本质就是字符序列 所以做为一个java开发者,我们要重点掌握好String的方法使用 ...
- JVM体系结构之七:持久代、元空间(Metaspace) 常量池==了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap
一.intern()定义及使用 相信绝大多数的人不会去用String类的intern方法,打开String类的源码发现这是一个本地方法,定义如下: public native String inter ...
随机推荐
- Android studio使用git-android学习之旅(79)
首先我参考了hello_my_show和梦痕_sky的博客,表示感谢 android studio对于git的支持是很好的,这节课我们拉讲解怎么使用git可视化工具来clone project和提交修 ...
- Android+Eclipse修改包路径
在开发过程中发现之前定的包名或是路径不太合理,怎么修改呢?选中要修改的包,按F2按键,如下图: 图1 上图是我修改后的,修改前的包名是com.example.appcenter,自改为com.exam ...
- sqlite相关使用
一.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能 ...
- Leetcode_203_Remove Linked List Elements
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/45868027 Remove all elements fr ...
- OpenCV——老照片效果
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- RHEL6.4安装nginx
RHEL6.4安装nginx 下载nginx-1.6.1.tar.gz, 解压进入目录: $ yum install pcre-devel $ ./configure --with-http_ssl_ ...
- javascript访问html元素的内容(1)
形如如下格式的html元素: <p id="my_p">I'm <strong>BIG</strong> panda!!!</p> ...
- The 7th tip of DB Query Analyzer
The 7th tip of DB Query Analyzer MA Gen feng ( Guangdong Unitoll Services incorporated, Gu ...
- Java IO学习--(三)通道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力.所以管道也可以作为数据源以及目标媒介. 你不能利用管道与不同的JVM中的线程通信(不同的进程).在概念上,Java的管道不同于U ...
- Mysql创建索引
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...