Java中的String数据类型

本文主要是说明一些String数据类型的基本知识,有些杂乱,不过都是比较重要的东西,主要是参考了网上人的资料。原文网址:http://dev.yesky.com/91/2309091.shtml

  主要是一下几点:

  1、String是不属于8中基本数据类型的,String是一个对象。

这里补充下JAVA的8种基本数据类型:基本类型分为三类,字符型(char)、布尔型(boolean)、数值型(byte、short、int、long、float、double)。这里数值型又可以分为两种,整数型(int、short、long)和浮点型(float、double)。JAVA中数值类型不存在无符号的,他们的取值范围是固定的,不会随机器硬件环境或者操作系统的改变而改变。

对象的默认值是null,所以String的默认值也是null。但它又是一种独特的对象,有自己独特的一些性质。

2.new String()和new String("");都是声明一个空串,这是要注意声明的是空串而不是null。

3.String str1="hello"; 和String str2= new String("hello");的区别:

  这里不去谈堆也没有涉及栈,只是先简单引入常量池的概念。常量池(constant pool)指的是在编译期间被确定,并被保存在已编译的.class文件中的一些数据,包括了类、方法、接口等的常量,也包括字符串常量。下面有两个例子:

1 String s0=”kvill”;
2 String s1=”kvill”;
3 String s2=”kv” + “ill”;
4 System.out.println( s0==s1 );
5 System.out.println( s0==s2 );

这里输出结果为:

true
true

解释下,java确保一个字符串常量只有一个拷贝,在例子中,s0和s1中的“kvill”都是字符串常量,在编译期就确定了,所以s0==s1为true。对于s2,“kv”和“ill”都是常量,当一个字符串常量由多个字符串常量相加得到时,它本身也是字符串常量。所以s2在编译期就被解析为一个字符串常量而得以确定,所以我们可以得出s0==s1==s2。但是用new String("kvill‘)建立的字符串不是一个常量,所以由new String()创立的字符串不放到常量池中。他们有各自的地址空间。

  

  4.String中的intern()函数。

  存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用。

下面看例子:

 1 String s0= “kvill”;
 2 String s1=new String(”kvill”);
 3 String s2=new String(“kvill”);
 4 System.out.println( s0==s1 );
 5 System.out.println( “**********” );
 6 s1.intern();
 7 s2=s2.intern(); //把常量池中“kvill”的引用赋给s2
 8 System.out.println( s0==s1);
 9 System.out.println( s0==s1.intern() );
10 System.out.println( s0==s2 );

输出的结果为:

false
**********
false //虽然执行了s1.intern(),但它的返回值没有赋给s1
true //说明s1.intern()返回的是常量池中”kvill”的引用
true

  5.String是不可变的。

  String的实例一旦生成就不会再改变了,比如说:String str=”kv”+”ill”+” “+”ans”; 就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”kvill”又和” “ 生成 ”kvill “存在内存中,最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的。

  综上,就是java中对String的一些理解。主要是参考的文章开头的链接那篇文章,有些东西我还没接触到,比如java虚拟机,所以对一些东西还是不懂得,准备看看这方面的书,有些人推荐这类书了。只是一直没看,得抓紧加油好好学习了!

时间: 2024-10-27 03:03:50

Java中的String数据类型的相关文章

全面理解Java中的String数据类型

1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String() 和 new String("") 都是申明一个新的空字符串,是空串, 不是null 3. String str="kvill"  和 String str=new String ("kvill")  的区别: 先不谈堆 和 栈

String是java中的基本数据类型吗

1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. Java代码 new String() 和 new String("")都是申明一个新的空字符串,是空串不是null: 3. String str="kvill": String str=new String ("kvill"); 的区别: 在这里,我们

Java中的String为什么是不可变的?

转载:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于J

Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的. 不能改变状态的意思是:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 2. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: 1 String s =

Java中的基本数据类型

Java中的基本数据类型分四类八种 byte(Byte-1)/short(Short-2)/int(Integer-4)/long(Long-8) boolean(Boolean-1bit) char(Character-2) float(Float-4)/double(Double-8) 括号后是他们的包装类和所占字节大小(Java中的基本数据类型所占字节大小是固定的,和C/C++中不一样) 基本数据类型的默认值: Data Type Default Value (for fields) by

JAVA中分为基本数据类型及引用数据类型

一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0 int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0 long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数

java 中的String类型

java 中的String类型   (1)String类型的数据可以表示所有的数据类型. (2)String中的字符串常量与一般的字符串:                String str0 = "hello";//字符串常量“hello”被预先放到了数据段的字符串常量池中                String str1 = "hello";//直接从常量池中寻找已有的字符串常量                String str2 = new String

Java中的String与常量池

string是java中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.下面介绍java中的String与常量池. 1. 首先String不属于8种基本数据类型,String是一个类类型. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null: 3. String str=”k

Java中的String为什么是不可变的?

原文:张纪刚 链接:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象