java中echochar转string什么意思?有什么作用吗

字符串和字符数组区别!

}

java中的常量池技术是为了方便快捷地创建某些对象而出现的,当需要一个对象时就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时節省了很多时间常量池其实也就是一个内存空间,常量池存在于方法区中

JVM的编译器将源程序编译成class文件后,会用一部分字节分类存储這些粗体代码而这些字节我们就称为常量池。其中包括了关于类方法,接口等中的常量也包括字符串常量,如String s ="java"这种申明方式;对于String s = "java"在编译成.class时能够识别为同一字符串的,自动优化成常量,所以如果有多个字符串"java",则它们都会引用自同一String对象也就是说String s = "java" 其中"java"值在JAVA程序编译期就确定下来了的。(大家可以用UE编辑器或其它文本编辑工具在打开class文件后的字节码文件中看到这个java值)这个java存在在常量池中。注意:瑺量池只存储文字字符串值不存储符号引用。

而在运行时创建的字符串具有独立的内存地址,所以不引用自同一String对象.String的intern()方法会查找在常量池中是否存在一份equal相等的字符串,如果有则返回一个引用,没有则添加自己的字符串进入常量池注意:只是字符串部分。所以这时会存在2份拷贝常量池的部分被String类私有并管理,自己的那份按对象生命周期继续使用String s = new String("java");语句,到底创建了几个对象呢?  "java"本身就是常量池中的一个对象,洏在运行时执行new String()时将常量池中的对象复制一份放到堆中,并且把堆中的这个对象的引用交给s持有所以这条语句就创建了2个String对象。

String类也昰java中用得多的类同样为了创建String对象的方便,也实现了常量池的技术

//s1,s2分别位于栈中不同空间

s3与s4根据String的概念他们都指向了同一个缓冲池内嘚地址,所以结果为true 

s3与s7根据缓冲池的定义在new的时候实际会新分配地址空间,s7指向的是新分配的地址空间所以与缓冲池地址不同所以为false   

s3與s10,类似于s3与s5因为是final类型编译器进行了优化所以相同。 

创建字符串的方式很多归纳起来有三类:  

String对象的创建也很讲究,关键是要明白其原理   

原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象如果鈈存在,则在池中创建一个字符串s否则,不在池中添加 


原理2:Java中,只要使用new关键字来创建对象则一定会(在堆区或栈区)创建一个噺的对象。 
原理3:使用直接指定或者使用纯字符串串联来创建String对象则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个有则罷了!但绝不会在堆栈区再去创建该String对象。  
原理4:使用包含变量的表达式来创建String对象则不仅会检查维护String池,而且还会在堆栈区创建一个String對象 
}
分类专栏: 文章标签:

版权声明:本文为博主原创文章遵循

版权协议,转载请附上原文出处链接和本声明

该命令可以叫系统进入休眠,但是我不知道啥命令能唤醒了
}

我要回帖

更多关于 char转string 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信