一、String类

1.String类是不可以变类,也就是说String对象声明后

2.java.lang.String;是字符串类型

(1)字符串一旦创建不可再改变,“abc”字符串对象一旦创建,不可在改变成“abcd”。

(2)提升字符串的访问效率:在程序中使用了“缓存”技术,所以在java中所有使用“双引号”括起来的字符串,都会在“字符串常量池“中创建一份,字符串常量池在方法区中存储。

(3)在程序执行过程中,如果程序用到某个字符串,例如:”abc“,那么程序会在字符串常量池中去搜索该字符串,如果没有找到这个字符串则在字符串常量池中新建一个”abc“字符串,如果找到就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问字符串的效率)。

(4)使用Sting的时候​,应该注意的问题:尽量不要做字符串频繁的拼接操作,因为字符串一旦创建就不可以改变了,只要频繁的拼接,就会在字符串常量池中​创建大量的字符串对象,给垃圾回收带来问题。

package com.bjpowernode.java_learning;

​

public class D72_1_StringClassAnlysis {

  public static void main(String[] args) {

    //创建一个“abc”字符串对象,该对象的内存地址,让s1变量保存。

    //s1是一个引用,s1指向“abc”对象

    String s ="abc";

    //可以让s1重新指向吗?s1是局部变量,s1前面是没有final,所以s1是可以重新指向的。

    //但是"def"字符串本身是不可以变的。

    String s1 = "雄安";

    String s2 = "雄安";

    System.out.println(s1==s2);

    System.out.println(s1.equals(s2));

    //比较两个字符串的值,不能用双等号,要使用函数.equals,双等号比较的是内存地址

    //如果字符串是new出来的,那么内存地址就肯定不相等了,这个了例子也证明了

    //直接使用字符串的话,那么就是存储在了方法区的字符串常量池

    String s3 = new String("雄安");

    String s4 = new String("雄安");

    System.out.println(s3==s4);

    System.out.println(s3.equals(s4));

    System.out.println(s1==s3);

    System.out.println(s1.equals(s3));

    //题解:以下程序创建了三个对象,两个在堆内存,一个在方法区内存

    String s5 = new String("abc");

    String s6 = new String("abc");

    String[] ins = {"sport","music","food","sleep"};

    //要求将上面的兴趣爱好拼接成一个字符串

    String temp = null;

    for(int i=0;i<ins.length;i++) {

      if(i==ins.length-1) {

        temp += ins[i];

      }else {

        temp += ins[i]+",";

      }

    }

    System.out.println(temp);

    //不推荐这样做因为做了大量拼接,方法区创建了很多字符串

  }

}

二、字符串常用构造方法

package com.bjpowernode.java_learning;

​

public class D72_2_StringCommonMethod {

  public static void main(String[] args) {

    //常用的构造方法

    String s1 = "abc";

    String s2 = new String("abc");

    byte[] bytes = {97,98,99,100};

    String s3 = new String(bytes);

    System.out.println(s3);//从输出结果可以看出,String已经重写了Object中的toString

    String s4 = new String(bytes,0,2);//第二个参数是开始位置,第三个参数是长度

    System.out.println(s4);

    char[] c1 = {'我','是','中','国','人'};

    String s5 = new String(c1);

    System.out.println(s5);

    String s6 = new String (c1,2,2);

    System.out.println(s6);

  }

}

​

三、源码:

D72_1_StringClassAnlysis.java

D72_2_StringCommonMethod.java

https://github.com/ruigege66/Java/blob/master/D72_1_StringClassAnlysis.java

https://github.com/ruigege66/Java/blob/master/D72_2_StringCommonMethod.java

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载72-String类详解、多个构造方法的更多相关文章

  1. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  2. java 复习整理(四 String类详解)

    String 类详解   StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上S ...

  3. Java的String类详解

    Java的String类 String类是除了Java的基本类型之外用的最多的类, 甚至用的比基本类型还多. 同样jdk中对Java类也有很多的优化 类的定义 public final class S ...

  4. Java常用类(一)String类详解

    前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结.他们有很多的方法都是我们经常要用到的.所以我们一定要把它好好的掌握起来! 一.String简介 1.1.String(字符串常量)概述 ...

  5. Java常用类(二)String类详解

    前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结.他们有很多的方法都是我们经常要用到的.所以我们一定要把它好好的掌握起来! 一.String简介 1.1.String(字符串常量)概述 ...

  6. Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.

    1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...

  7. STL之string类详解

    通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类 ...

  8. String类详解,StringBuffer

    先说一下String类的equals()方法. 下面我们先看一段代码: 这段代码输出的结果为: ture true -------------- false 咋看之下貌似Object类比较特别,那么我 ...

  9. String类详解

    看了很多文章事实证明之前的通过new创建String对象只有一个是错误的,实际上创建一个或者创建两个对象,一个在堆区,一个在常量池,当常量池中已经存在就不会创建.看了一篇非常好的文章http://ww ...

  10. 深入理解String类详解

    1.Stringstr = "eee" 和String str = new String("eee")的区别 先看一小段代码, 1 public static ...

随机推荐

  1. 51nod 1006:最长公共子序列Lcs

    1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...

  2. DuplicateHandle 伪句柄 与 实句柄的应用

    如果把GetCurrentThread()返回值传递给一个HANDLE句柄,用它进行ResumeThread,结果肯定不是我们想要的.下面的例子详细描述了伪句柄的调用结果: #include &quo ...

  3. sql拆分列 时间拆分 日、月、年

    我想 查看今日访问人数 需要分组查询 就得 时间拆分 这两天百度 方法有很多 substring ... 但是 我这一列 是时间类型: 可以直接用 DATEPART() 函数用于返回日期/时间的单独部 ...

  4. html通配符

    ♠ ♠ ♠ 黑桃 ♣ ♣ ♣ 梅花 ♥ ♥ ♥ 红桃,心 ♦ ♦ ♦ 方块牌 ◊ ◊ ◊ 菱形 † † † 匕首 ‡ ‡ ‡ 双剑号 ¡ ¡ ¡ 反向感叹号 ¿ ¿ ¿ 反向问号 ← ← ← 左箭头 ...

  5. 屏幕切换 onStart() onStop() onRestart() onDestroy()

    android:configChanges="orientation|keyboardHidden|screenSize"          //xml文件<activity ...

  6. 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)

    一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...

  7. 低JAVA版本,高兼容性启动

    低JAVA版本,高兼容性启动 背景:部分操作系统java环境低版本,暂时无法更新最新版本,新系统需要使用较高版本Java环境 1.JAVA低版本不兼容当前应用 2.解压安装JAVA,无需配置环境变量 ...

  8. 对比Node.js和Python 帮你确定理想编程解决方案!

    世上没有最好的编程语言.有些编程语言比其他编程语言用于更具体的事情.比如,你可能需要移动应用程序,网络应用程序或更专业化的系统,则可能会有特定的语言.但是我们暂时假设你需要的是一个相对来说比较简单的网 ...

  9. selenium破解人人登陆验证码

    from selenium import webdriverfrom PIL import Imagefrom chaojiying import Chaojiying_Clientimport ti ...

  10. Python 安装gevent,在导入gevent之后就报错了

    错误信息如下 RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected ...