一、String类简介
java.lang.String类用于描述一个字符序列。String类是不可变对象的类。其对象一旦被创建,永远无法改变。但是对象的引用可以重新赋值。而且String类被final关键字修饰,其本身不能被继承。String类内部封装了字符数组以及针对字符数组操作的相关算法。
二、关于String类是不可变对象的几点解释
1、经常使用String类作为方法的参数,为了保证方法的调用正确,要求字符串内容不可以改变
2、出于内存的考虑,重用在开发中远比修改多得多。所以Java在重用字符串的时候没有新建新对象,而是都引用同一个。这就要求字符串内容不可变。出于性能的考虑,JVM会将静态字符串(字面量/常量/常量连接的结果)在常量池中创建。并尽量使用同一对象重用静态字符串。对于重复出现的静态字符串,JVM会首先在常量池中查找,如果存在即返回该对象。不存在则创建。
public static void main(String[] args){
/**
* 当我们使用字符串字面值创建字符串对象时,
* 虚拟机会首先在常量池中查找,如果存在即返回该对象
*/
String str1 = "hello";//字符串 类创建对象的时候不需要new
String str2 = "hello";
String str3 = "hello";
String str4 = new String("hello");
System.out.println(str1 == str2);//使用==比较字符串的时候比较的是地址,而不是内容。
System.out.println(str1 == str3);
System.out.println(str1 == str4);//false
System.out.println(str1.equals(str4));//true //使用equals方法比较的是字符串中的内容
}

str2,str3不会创建新的对象,而是使用常量池中已有的Hello。str4使用new关键字会创建一个新的对象。

三、编译器对字面值量的优化

编译器在编译源文件的时候若发现表达式的两边都是常量的话,会先进行计算,在将结果生成到字节码文件中去。所以jvm运行.class文件的时候。下面的内容应该是这样的。

String str5 = "123"+"abc";
//编译器先进行运算
String str5 = "123abc"; String s = "123";
//编译器不运算,因为s是变量
String str6 = s + "abc";

四、String类在内存中采用Unicode编码,每个字符在内存中都占用两个字节(不管中英文)。而且每个字符的长度都是1(不管中英文)。

public static void main(String[] args) {
String str = "好好努力,学好java";
System.out.println(str.length());//
}

javase---string类介绍01的更多相关文章

  1. C++字符串和string类介绍

    一.C风格字符串 ◆ 1.字符串是用字符型数组存储的,字符串要求其尾部以'\0'作为结束标志.如:    char string[ ]="C++ programming language&q ...

  2. Java进阶01 String类

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html 作者:Vamei 出处:http://www.cnblogs.com ...

  3. 全面深入介绍C++字符串:string类

    http://blog.csdn.net/liuliming3000/article/details/1809385 1 从C到C++ string类 2 string类的构造函数 3 string类 ...

  4. c++string类的简单介绍

    #include "iostream" #include "string" using namespace std; /*@author:浅滩 *family: ...

  5. string类总结第一部分函数介绍

    在前面几章,看了整个String类的源码,给每个方法都行写了注释,但是太过凌乱,今天我就把String类的方法整理归纳,然后再讲一下String类比较难以理解的部分 特此声明:本文篇幅较大,涵盖知识点 ...

  6. JavaSE学习笔记(5)---内部类和String类

    JavaSE学习笔记(5)---内部类和String类 一.内部类基础 转自菜鸟教程 ​ 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来 ...

  7. [005] - JavaSE面试题(五):String类

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [005] - JavaSE面试题(五):String类 第1问:String.StringBuf ...

  8. 01.String类字符串本质

    String类是在java开发过程中,使用最最频繁的一个类,不管是 用户名 密码 还是http报文接收过来的数据,其本质就是字符序列 所以做为一个java开发者,我们要重点掌握好String的方法使用 ...

  9. JVM体系结构之七:持久代、元空间(Metaspace) 常量池==了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap

    一.intern()定义及使用 相信绝大多数的人不会去用String类的intern方法,打开String类的源码发现这是一个本地方法,定义如下: public native String inter ...

随机推荐

  1. 小强的HTML5移动开发之路(7)——坦克大战游戏1

    来自:http://blog.csdn.net/dawanganban/article/details/17693145 上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片 ...

  2. Which is Better: Forms Servlet or Socket Mode?

    URL:http://blogs.oracle.com/stevenChan/2009/06/which_is_better_forms_servlet_or_socket_mode.html Man ...

  3. Java-collections总结

    纸上得来终觉浅,绝知此事要躬行  --陆游    问渠那得清如许,为有源头活水来  --朱熹 类Collections是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例化,就像一个工具 ...

  4. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

  5. Java的依赖注入(控制反转)

    两个主角"依赖注入"和"控制反转": 1.二都说的都是同一件事,只是叫法不同.是一个重要的面向对象编程的法则,也是一种设计模式: 2.英文原称:依赖注入,Dep ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. 【LaTeX排版】LaTeX使用--入门基础<二>

    1.在命令之后留一个空格有下列方式: 源文件如下: \documentclass[a4paper,12pt]{book}%采用book类型(中篇论文一般采用这种类型),A4纸,字体为12磅,默认为10 ...

  8. Apache Hadoop 2.0.2-alpha

    原文出处http://hadoop.apache.org/docs/r2.0.2-alpha/hadoop-yarn/hadoop-yarn-site/Federation.html HDFSF分为2 ...

  9. 关于NSKeyedArchiver的编码格式

    NSKeyedArchiver在linux的实现默认的格式是二进制: NSArray *ary = @[@"hello",@"world",@"!!! ...

  10. HBase写被block的分析

    一个线上集群出现莫名奇妙不能写入数据的bug,log中不断打印如下信息: 引用 2011-11-09 07:35:45,911 INFO org.apache.hadoop.hbase.regions ...