一、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. 时间序列分解-STL分解法

    时间序列分解-STL分解法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. STL(’Seasonal a ...

  2. 《java入门》第一季之类(String类字符串一旦被赋值就没法改变)

    毫无疑问,String类是java里面最重要的类之一.因此它有很多方法需要了解和掌握. 字符串一旦被赋值,值就不能发生改变: package cn.itcast_02; /* * 字符串的特点:一旦被 ...

  3. jsp中的路径与跳转

    在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发: 先说重定向,它的调用方式是这样的 response.sendredirect("uri&q ...

  4. BDA大数据处理流程

    可以看出,数据处理用云,可以高效完成.而分析部分应该利用传统的bi工具.

  5. OpenCV由汉字生成图片(透明)----可以对抗论文查重!!!

    今天听说很多同志们写毕业论文重复率过高的问题,大牛说用图片代替字就行了,我就想用OpenCV实现一下看看能不能搞,果不其然还是可以的!!!主要的难点在于普通格式的图片背景不透明,需要使用背景透明的pn ...

  6. C++ 传参时传内置类型时用传值(pass by value)方式效率较高

    来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...

  7. FPGrowth

    在挖掘关联规则的过程中,无可避免要处理海量的数据,也就是事务数据库如此之大,如果采用Apriori算法来挖掘,每次生成频繁k-项集的时候,可能都需要扫描事务数据库一遍,这是非常耗时的操作.那么,可以想 ...

  8. iOS评分功能、APP中打开其他应用程序

    1.评分功能 iOS中评分支持功能开发非常简单. NSString *str = [NSString stringWithFormat: @"itms-apps://itunes.apple ...

  9. Hadoop Bloom Filter 使用

    1.Bloom Filter  默认的 BloomFilter filter =new BloomFilter(10,2,1); // 过滤器长度为10 ,用2哈希函数,MURMUR_HASH (1) ...

  10. 用shell脚本挂载linux主机拷贝相应文件

    #!/bin/sh TARGETIP=192.168.88.3 #这里是你要挂在的ftp服务器的IP地址 MOUNTDIR=/mnt TARGETDIR=/root/Desktop/Work ERRO ...