关于java中String的一点理解
String类是java的最基本类之中的一个,非常好的掌握它的原理非常是必要的!
1、String的Final类型的。是不可继承 的。final类默认的方法都为final类型,保证了方法不能被重载。成员变量不影响
2、String的本质就是char[] 而且其值是不可改变的
3、String str = "abc"是一种特殊的创建方式,"abc"存在常量区,str仅仅是对其的引用
4、String能够通过+串联。形成一个新的对象
5、java执行时会维护一个String Pool。用来存放程序执行产生的字符串,而且里面的字符串不会反复
6、创建字符串的方式非常多,归纳起来有三类:
其一。使用newkeyword创建字符串。比方String s1 = new String("abc");
其二,直接指定。
比方String s2 = "abc";
其三,使用串联生成新的字符串。比方String s3 = "ab" + "c";
public class MyString {
public static void main(String[] args) {
//关于String堆栈分析 String str1 = "abc";
System.out.println("abc" == str1);
/*1、在栈上分配内存存放str1
2、String池中开辟一块空间。存放String常量"abc";
3、str1指向String池中的"abc";
4、输出true
*/ String str2 = new String("abc");
System.out.println(str1 == str2);
/*1、栈上分配内存存放str2
2、此时的"abc"已经存在,然后将"abc"的引用传给String的构造函数。在堆上创建一个新的String对象
then the JVM still arranges for "abc" to be in that pool, and still
provides a reference to it, but that reference is then passed into a
constructor to create a NEW String object that's NOT in the pool and
copies the first one. It's that second String object which ends up
being assigned to the reference
3、str2指向在堆上的新创建的对象。
4、输出false
*/ String str3 = "a"+"bc";
System.out.println("abc" == str3);
/*1、栈上分配内存存放str3
2、依据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"abc"
3、str3指向在堆上的"abc"’
4、输出true
*/ String str4 = "a";
String str5 = "bc";
String str6 =str4+str5;
System.out.println("abc" == str6);
/*1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a"。
2) 栈中开辟一块中间存放引用s2。s2指向池中String常量"b",
3) 栈中开辟一块中间存放引用str5,
4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象,
5) 引用str6指向堆中(s1 + s2)所还原的新String对象,
6) str6指向的对象在堆中,而常量"ab"在池中,输出为false
*/ String str7 = new String("abc");
String str8 = new String("abc");
if(str7 == str8){
System.out.println("str7 等于str8");
}else{
System.out.println("str7 不等于str8");
}
//输出str7 不等于str8
}
}
关于java中String的一点理解的更多相关文章
- Java中try-catch-finally的一点理解
在只有try-catch语句中,如果catch块中出现了return语句或者抛出了异常,那么catch之后的语句是执行不到的:但是如果将代码放入finally中,即使catch中出现了return语句 ...
- java中String的相等比较
首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...
- 探秘Java中String、StringBuilder以及StringBuffer
探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...
- java中String类、StringBuilder类和StringBuffer类详解
本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...
- java中String相等问题
java中判断两个字符串是否相等的问题 判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是"==",但在java中不能这么写.在java中,用的是eq ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- java中String类型变量的赋值问题
第一节 String类型的方法参数 运行下面这段代码,其结果是什么? package com.test; public class Example { String str = new String( ...
- Java中String对象的不可变性
首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...
随机推荐
- 圈复杂度(Cyclomatic Complexity)
圈复杂度(Cyclomatic Complexity)是很常用的一种度量软件代码复杂程度的标准.这里所指的“代码复杂程度”并非软件内在业务逻辑的复杂程度,而是指代码的实现方式的 复杂程度.说起来有点绕 ...
- orm 通用方法——DeleteModel 主键删除
定义代码: /** * 描述:删除对象 * 作者:Tianqi * 日期:2014-09-17 * param:model 对象实例,包含主键 * return:int 受影响行数 * return: ...
- 使用iVMS-4200 存储录像数据时的设置
1.安装软件时,选择:存储服务器 2.对存储服务器进行配置,具体配置见 配置手册.
- javaScript for in循环遍历对象
for循环常被我们用来遍历数组,而如何遍历对象呢? 这时就需要用到for in循环了 写一个遍历对象名简写如下: for(var xxx in ooo){console.log(xxx)} 其中xxx ...
- IDEA下使用maven的mybatis错误—XXXDao is not known to the MapperRegistry
# IDEA下使用maven的mybatis常见错误(二) 错误类型二:mybatis.xml注册映射文件错误 错误提示:Type interface com.aynu.dao.CountryDao ...
- 兼容IE浏览器的canvas画线和圆圈
1.新建test.html文件,代码如下: <!DOCTYPE html><html><head> <meta charset="utf-8& ...
- android+myeclipse+mysql自定义控件下拉框的数据绑定
原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8031936.html 本人小白,那个大神看到有问题可指出,谢谢.... 这个是 ...
- Saltstack的API接口与调用方式
saltstack看起来是成为一个大规模自己主动化运维和云计算管理的一个框架,类似于SDK,并非像puppet仅仅成为一个工具.基于良好设计的API和清楚的思路,让salt的二次开发变得非常easy ...
- LeetCode 223 Rectangle Area(矩形面积)
翻译 找到在二维平面中两个相交矩形的总面积. 每一个矩形都定义了其左下角和右上角的坐标. (矩形例如以下图) 如果,总占地面积永远不会超过int的最大值. 原文 分析 这题前天试过,写了一堆推断.终究 ...
- 谈谈 .NET Reflector
著名的 .NET Reflector 如今要收费了,价格还不低: .NET Reflector Standard: $95 .NET Reflector VS: $195 .NET Reflector ...