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. apache-maven-3.0.4-bin.zip

    http://zhidao.baidu.com/share/2a8974fd1546ef5f11ad9cccb3cabf88.html apache-maven-3.0.4-bin.zip

  2. React开发实时聊天招聘工具 -第六章 登陆注册(2)

    1.bodyParser和cookieParser:   const bodyParser = require('body-parser') const cookieParser = require( ...

  3. Bootstrap概览

    摘选自runnoob.com,bootstrap4所有api概览: 一.安装: 弹性盒子(flexbox) Bootstrap 3 与 Bootstrap 4 最大的区别就是 Bootstrap 4 ...

  4. 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】

    背景 近期開始研究算法,于是在leetcode上做算法题,第五题Longest Palindromic Substring便是关于回文子串的. 什么是回文字串 回文字符串是指将该字符串前后颠倒之后和该 ...

  5. 【shell学习】经常使用条件推断-字符,数字,文件

    IF 推断 之前也写过简单的shell脚本,也不是转职运维.和系统相关的工作比較少.所以不怎么熟练. 近期因为系统总是出现各种乱七八糟的问题,也没有人来协助.仅仅好自己写shell脚本了,都是些基础的 ...

  6. 与TCP/IP协议的初次见面(一)

    与TCP/IP协议的初次见面(一) 前言 今下午刚才女朋友那边回来,唉,算是情人节去找她吧,穷屌丝住不起好酒店,住的打折酒店,只是女朋友来姨妈了,万幸啊,牙还疼得不行,这几天光照应她了,没空写博客了. ...

  7. VS 格式化代码 Ctrl + K, Ctrl + F

  8. POJ 2133 暴搜

    题意: 思路: 按照题意暴搜 注意 如果目标串==给的串 答案是2 //By SiriurRen #include <cstdio> #include <cstring> #i ...

  9. Spark 1.6.1 源码分析

    由于gitbook网速不好,所以复制自https://zx150842.gitbooks.io/spark-1-6-1-source-code/content/,非原创,纯属搬运工,若作者要求,可删除 ...

  10. css3.0+html绘制六边形

    <section class="ass_desc"> <section class="ass_descLeft posRe"> < ...