4000336032

成都Java培训学校

有关Java编程基础知识总结(二)

来源:成都Java培训学校 发布时间:2016/10/17 10:39:08

1、String 字符串API 解读

我们要想真正了解String类,较简单、较直接的办法就是读懂API帮助文档中对String类的介绍,API是SUN公司写的,同时这些信息也是较底层的,更有助于帮助我们从根本上了解String类!

首先打开API帮助文档,我们一起来解读……

1、public final class String extends Object

1)这句话告诉我们String 类是较终类(final类)不能被继承。

2)它继承与Object,它拥有Object类的所有属性和方法,比如:Object类的toString()、hashCode()、equals()等方法。当然Object类是所有类的父类,即所有类都拥有Object类的属性和方法,不仅仅是String 类。

2、The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class.

1)这句话告诉我们Java中所有字符串的字面值都是String类的实例,即时一个String类的一个具体对象。例如以下程序:


1 public class StringDemo {

2     public static void main(String[] args) {

3         System.out.println("abc".length());//3

4         System.out.println("abc".equals("abc"));//true

5     }

6 }



如上面的程序,"abc"拥有String类的方法,因此它是一个String类的一个实例化对象。

3、String are constant;their values cannot be changed after they are created.

1) 字符串是常量,一旦被创建,他们的值就不能改变。如以下程序2:

1 public class StringDemo {

2     public static void main(String[] args) {

3         String str="Hello";

4         String str2=",World!";

5         String str3=str+str2;

6         System.out.println(str3);//    Hello,World!

7         str="Linux";

8         System.out.println(str);//Linux

9     }

10 }

从上面程序我们可知:str和str2拼接之后形成了一个新的字符串,str和str2本身并没有变化。有人会有这样的疑问,当str="Linux";这条语句执行时,str的值不是变了吗?我们要区分清楚,字符串是引用类型变量,当执行完str="Linux";这条语句后,"Hello"这个字符串常量(也是一个字符串对象)并没有改变,知识它的句柄str指向了新的字符串对象"Linux"而已!

4、String buffers support mutable strings. Because String objects are immutable they can be shared.For example:

字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们。

1)String str="abc";

is equivalent to:

char data[] ={'a','b','c'};

String str=new String(data);

这也给我们提供了把数组转化成字符串的一种方法!


2、String字符串的本质

String字符串 = char[] + 操作(toUpperCase(),concat())

String的底层就是char[]数组,是char[]数组的封装类

类: 数据+相关的操作

char数组只是数据, 没有操作

String用来表示文本,即一系列 Unicode 字符。字符串是我们开发过程中频繁使用的对象,我们在软件界面上提示用户的所有一切都是字符串:不管是发票的日期还是发票的编号,或者是发票的金额虽然在 定义数据类型时候分别应该是DateTime、double或string,但当界面呈现的时候,都是以文本的形式呈现,也就是string格式。

字符串是 Unicode 字符的有序集合,用于表示文本。所以String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。字符串本质是字符数组——这是一个非常重要的概念,了解这个概念就可以全面的理解和把握字符串的各种特 征。

2、String的两种实例化方式

1、通过接收一个String类的对象,并重新实例化这个对象(这句话比较拗口,慢慢理解)

String本身是一个类,在String类中定义了如下的构造方法:

String(String original):初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

例如:String str=new String("Hello");

2、采用直接赋值的方式进行对象的实例化

例如:String str2="Hello";

3、Java String对象和字符串常量的关系解析1、字符串内部列表   JAVA中所有的对象都存放在堆里面,包括String对象。字符串常量保存在JAVA的.class文件的常量池中,在编译期就确定好了。 虚拟机为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,包括直接常量(string、integer和float point常量)和对其他类型、字段和方法的符号引用。

例如,String s = new String( "myString" );

其中"myString"是字符串常量,在编译时被存储在常量池的某个位置。 在解析阶段,虚拟机发现字符串常量"myString",它会在一个内部字符串常量列表中查找,如果没有找到,那么会在堆里面创建一个包含字符序列 [myString]的String对象s1,然后把这个字符序列和对应的String对象作为名值对( [myString], s1 )保存到内部字符串常量列表中。如下图所示:

引用的这篇博客到此结束,因为不是太理解,对其正确性保持质疑态度!

接下来我们引用另一篇博客来解释上面的疑惑:http://www.bianceng.cn/Programming/Java/201101/22511.htm

4、Java String字符串对象的创建及管理

Constant Pool常量池的概念:

在讲到String的一些特殊情况时,总会提到String Pool或者Constant Pool,但是我想很多人都不太明白Constant Pool到底是个怎么样的东西,运行的时候存储在哪里,所以在这里先说一下Constant Pool的内容。String Pool是对应于在Constant Pool中存储String常量的区域.习惯称为String Pool,也有人称为String Constant Pool.好像没有正式的命名。在java编译好的class文件中,有个区域称为Constant Pool,他是一个由数组组成的表,类型为cp_info constant_pool[],用来存储程序中使用的各种常量,包括Class/String/Integer等各种基本Java数据类型。


更多优惠信息请咨询成都Java培训学校http://cdjavapx.soxsok.com/

联系人:孙老师

联系电话:400-0088-291  在线qq:1974950309





领取试听课
每天限量名额,先到先得
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
  • 详情请进入 成都Java培训学校

关于我们 | 招生信息 | 新闻中心 | 学校动态

版权所有:搜学搜课(www.soxsok.com)