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的一点理解的更多相关文章

  1. Java中try-catch-finally的一点理解

    在只有try-catch语句中,如果catch块中出现了return语句或者抛出了异常,那么catch之后的语句是执行不到的:但是如果将代码放入finally中,即使catch中出现了return语句 ...

  2. java中String的相等比较

    首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...

  3. 探秘Java中String、StringBuilder以及StringBuffer

    探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问 到的地方,今天就来和大家一起学习 ...

  4. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  5. java中String相等问题

    java中判断两个字符串是否相等的问题   判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是"==",但在java中不能这么写.在java中,用的是eq ...

  6. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  7. java中String、StringBuffer、StringBuilder的区别

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  8. java中String类型变量的赋值问题

    第一节 String类型的方法参数 运行下面这段代码,其结果是什么? package com.test; public class Example { String str = new String( ...

  9. Java中String对象的不可变性

    首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...

随机推荐

  1. 圈复杂度(Cyclomatic Complexity)

    圈复杂度(Cyclomatic Complexity)是很常用的一种度量软件代码复杂程度的标准.这里所指的“代码复杂程度”并非软件内在业务逻辑的复杂程度,而是指代码的实现方式的 复杂程度.说起来有点绕 ...

  2. orm 通用方法——DeleteModel 主键删除

    定义代码: /** * 描述:删除对象 * 作者:Tianqi * 日期:2014-09-17 * param:model 对象实例,包含主键 * return:int 受影响行数 * return: ...

  3. 使用iVMS-4200 存储录像数据时的设置

    1.安装软件时,选择:存储服务器 2.对存储服务器进行配置,具体配置见 配置手册.

  4. javaScript for in循环遍历对象

    for循环常被我们用来遍历数组,而如何遍历对象呢? 这时就需要用到for in循环了 写一个遍历对象名简写如下: for(var xxx in ooo){console.log(xxx)} 其中xxx ...

  5. IDEA下使用maven的mybatis错误—XXXDao is not known to the MapperRegistry

    # IDEA下使用maven的mybatis常见错误(二) 错误类型二:mybatis.xml注册映射文件错误 错误提示:Type interface com.aynu.dao.CountryDao ...

  6. 兼容IE浏览器的canvas画线和圆圈

    1.新建test.html文件,代码如下: <!DOCTYPE html><html><head>    <meta charset="utf-8& ...

  7. android+myeclipse+mysql自定义控件下拉框的数据绑定

    原创作品,允许转载,转载时请务必声明作者信息和本声明.http://www.cnblogs.com/zhu520/p/8031936.html 本人小白,那个大神看到有问题可指出,谢谢.... 这个是 ...

  8. Saltstack的API接口与调用方式

     saltstack看起来是成为一个大规模自己主动化运维和云计算管理的一个框架,类似于SDK,并非像puppet仅仅成为一个工具.基于良好设计的API和清楚的思路,让salt的二次开发变得非常easy ...

  9. LeetCode 223 Rectangle Area(矩形面积)

    翻译 找到在二维平面中两个相交矩形的总面积. 每一个矩形都定义了其左下角和右上角的坐标. (矩形例如以下图) 如果,总占地面积永远不会超过int的最大值. 原文 分析 这题前天试过,写了一堆推断.终究 ...

  10. 谈谈 .NET Reflector

    著名的 .NET Reflector 如今要收费了,价格还不低: .NET Reflector Standard: $95 .NET Reflector VS: $195 .NET Reflector ...