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. Design Pattern - Service Locator Pattern--转载

    原文地址:http://www.tutorialspoint.com/design_pattern/service_locator_pattern.htm The service locator de ...

  2. jquery计算两个日期的相差天数

    var days = daysBetween('2016-11-01','2016-11-02'); /** * 根据两个日期,判断相差天数 * @param sDate1 开始日期 如:2016-1 ...

  3. scrapy框架设置代理

    网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...

  4. MongoDB常用操作整理

    Mongodb:是一种NoSQL数据库,NoSQL:Not Only SQLSQL: 数据表->JDBC读取->POJO(VO.PO)->控制层转化为JSON数据->客户端 这 ...

  5. <QT障碍之路>qt中使用串口类接收数据不完整

    问题:当用QT中的serial->readAll()的时候,不会把全部的数据一次性都读取出来,而是阶段性的.原因是因为当串口有信号时候,readyRead()信号就会被抛出,那么一帧完整的数据帧 ...

  6. HRBUST 1819 石子合并问题--圆形版

    石子合并问题--圆形版 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ...

  7. Linux 下查看某进程的线程数

    1.查看文件 /proc/${pid}/status2.pstree -p ${pid}3.输入 top -bH -d 3 -p ${pid}top -H手册中说:-H : Threads toggl ...

  8. 上下文切换查看 & sar

    怀疑CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b.sar -u和 sar-d来看 sar –W 查看页面交换发生状况 [root@localhost ~] ...

  9. openfire 开发遇到的些问题

    openfire的 jid    账户名 + '@" + 你的域名      可是当你的账户名中 有大拼音的 时候  就会变成小写   比如     Test  ,  jid  =  tes ...

  10. crm2011处理save事件和获取当前窗口信息

    //防止保存记录,eContext:当前上下文对象 function My_PreventSaveFunction(eContext) {     eContext.getEventArgs().pr ...