java String类原理浅析
来源:互联网 发布:数据库中的索引是什么 编辑:程序博客网 时间:2024/05/17 22:58
/*
2017/10/19 理科南 记
*/
一.String类
String 表示一个字符串,内部使用字符数组实现,该类不可变
二.存储
上图为下列语句执行的内存存储过程:
String S1 = “粪粪”;
String S2 = new String(“粪粪”);
String S3 = “粪粪”;
三.String实例(注释很详细):
public class StringDemo { public static void main(String[] args) { //String 的两种赋值方式的分析,推荐第一种 //1.直接赋值 String S1 = "粪粪"; //2.使用new关键字创建对象 new :表示在堆中申请内存空间,强制型的一个操作 //面试题:下面语句创建了几个对象? --->1个 String S2 = new String("粪粪"); System.out.println(S1==S2);//比较指向的地址,返回false //String 类在运行期和编译期的分析 String S3 = "粪粪"; //常量池已有"粪粪",所以不会再创建对象,直接指向,省了内存空间 System.out.println(S1==S3); //在常量池中找,所以会返回true System.out.println("-----------我是可爱的分割线---------"); //4种情况分析:直接赋值,字符串连接时,分析编译器和运行期 //如果在编译期值可以被确定,那就使用已有的对象,否则会创建新的对象 String a = "a";//编译时可以确定,所以直接把变量a替换成"a" String a1 = a+1;//编译时语句是一句一句来的,会把a当成是变量,不可以确定,变量在运行的时候才有值,上一句跑了,a才有值,然后a1才会为"a1", //所以这句话会在堆中创建一个a1对象 String a2 = "a1";//这句则在常量池中创建一个"a1",因此a1==a2 :false System.out.println(a1==a2); final String b="b"; String b1=b+"1"; //编译期b到这里已替换,1加不加双引号无所谓,final才可以,没有final就还是变量 String b2 = "b1"; System.out.println(b1==b2);//true String c = getC(); //注意,方法只有在运行期才能得到结果 String c1 = c+1; String c2 = "c1"; System.out.println(c1==c2); //false final String d = getD(); String d1 = d+1; String d2 = "d1"; System.out.println(d1==d2);//还是false,因为虽然d是final,但方法只有在运行时才有返回结果,因此一样是false } private static String getC(){ return "c"; } private static String getD(){ return "d"; }}
输出:
false
true
———–我是可爱的分割线———
false
true
false
false
阅读全文
1 0
- java String类原理浅析
- Java String类浅析
- java String浅析
- Java String浅析
- 浅析java中的String
- Java String 源码浅析
- Java String 源码浅析
- Java中的String浅析
- 【java基础】浅析String
- JAVA EJB原理浅析
- java aqs原理浅析
- java虚拟机原理浅析
- java编译原理浅析
- Java 字符串原理浅析
- Java String 源码浅析【byGavin】
- JAVA String.split() 方法浅析
- 浅析String类
- String类浅析
- wps怎么删除分节符以及段落边框产生分隔线的取消方法
- windows下进入linux出现乱码的解决方式
- android style 使用
- 【SSH】Spring学习(一)
- Android 时间倒计时
- java String类原理浅析
- python 内部使用unicode编码
- CentOS 7 下 修改Mysql 5.7datadir的位置,无法启动的问题解决
- 模拟远程温度监控系统(包含程序)
- C#学习总结(1)——与java的几个区别
- 数据结构实验5(从文件中读取数据)
- C语言中位运算异或“∧”的作用
- mt6750 battery_common.c阅读笔记1
- 300. Longest Increasing Subsequence