string对象

原创 2007年09月12日 09:24:00

string是不可变的对象。

所以字符串连接操作并不更改当前字符串,只是创建并返回新的字符串,速度慢。

所以string有独特的Intern/IsInterned方法

 

对字符串运算前要检查字符串是否为null

null意味着字符串没有赋值,没有分配内存。

 

检查一个字符串是否为空字符串

使用Length来检查一个字符串是否为空。

 

计算Length时,只需要检查内部数组的长度,不需要字节比较。

 

字符串连接

频繁进行字符串连接操作时,使用StringBuilder类来改善性能,连接操作越频繁,差别越明显。

StringBuilder 具有多个构造函数,可以从字符串初始化对象并设置其容量和最大容量。(默认的最大容量约为 20 亿个字符)对象的容量可以根据需要调高,只要不超过最大容量即可。构造 StringBuilder 之后,就不能再调整其最大容量。

比较字符串

String.Equals方法来比较两个字符串

 

空字符串

String.Empty表示空字符串,不要用””String.Empty的定义为public static readonly string Empty编译时会转化成””,但是String.Empty是一个常数,””是一个字符串对象,对字符串对象进行运算总是很慢的。

 

Unicode表示字符串

/U + 字符串的unicode编码,比如/U0066b

 

Clone字符串

因为字符串是不可改变的,所以具有相同值的两个单独字符串并没有多大意义。所以,虽然 String 实现了 IClonable,但 String.Clone 只返回对相同字符串的引用,而不进行克隆。

使用静态方法 Copy可以创建字符串的副本

字符串转换

string实现了IConvertible,但是没有办法从外部访问IConvertible定义的Toxxx函数,(声明为private)但是需要用Convert 类中的 To... 方法将字符串转换为其他内置值类型

字符串比较

值比较

string是对象,但是string重载了==运算符,所以==运算符实际调用 String.Equals

如果您希望使用 C# 比较引用,可以将两个字符串引用都强制转换为 Objectreturn (Object)s1 == (Object)s2;

或者使用 Object.ReferenceEquals

Intern/IsInterned

因为string是不可变得对象,.NET 运 行时在应用程序域中保留了一个字符串常值池。当它将一个程序集加载到应用程序域中时,将该程序集的字符串常值与应用程序域的字符串常值池合并,从而避免了 字符串常值的重复。(这样所有字符串常值只有一个副本,就可以对字符串常值进行引用比较,而且因为引用只需比较地址即可,所以比值比较快得多。)

可以使用静态方法 Intern该方法将字符串添加到常值池中,还可以使用静态 IsInterned 方法检查字符串是否已经位于池中。

对象string互转

/** * 对象转换成string * */ public static String object2String(Object o) { String value = ""; tr...
  • u011747761
  • u011747761
  • 2015年06月01日 10:16
  • 1300

new String()究竟创建几个对象?

new String()究竟创建几个对象?1. 由来遇到一个Java面试题,是关于String的,自己对String还有点研究?下面是题目的描述: 在Java中,new String("hello...
  • Sun1956
  • Sun1956
  • 2016年11月14日 17:39
  • 4934

关于String创建了多少个对象

String创建对象时系统会自动创建一个字符串缓冲池,在你进行如String str = "a";之类的操作时,系统会先在缓冲池中寻找有没有,如果没有就会创建一个。String s1 = "abc";...
  • eag1eX
  • eag1eX
  • 2016年11月27日 21:04
  • 366

String 创建几个对象问题(详解-不容错过)

String 创建几个对象问题(详解)
  • lv836735240
  • lv836735240
  • 2014年07月31日 21:25
  • 3447

string 转 java对象、转map的方式

1、使用fastJson 将String转 map: String out;         Object succesResponse = JSON.parse(out);    //先...
  • start_2013
  • start_2013
  • 2016年08月14日 15:05
  • 17803

String创建对象理解

对String的创建过程进一步理解。
  • njiang
  • njiang
  • 2015年02月27日 20:45
  • 1254

java中String到底创建了几个对象

1.String a = new String("1"+"2")共建了几个对象我相信,绝对是个经典兼考倒一堆人的题目。经典,Java的面、笔试上都会有,可又总是有人会犯晕。呵呵!看构造器里面("1"+...
  • spy19881201
  • spy19881201
  • 2010年08月05日 13:03
  • 6359

String str = new String("xyz") 会创建几个对象

答案是 两个对象,要理解这个,就要知道string类的工作原理。下面来慢慢分析一下: public class StringTest { public static void main(Str...
  • andychen314
  • andychen314
  • 2016年03月11日 17:36
  • 3476

String s=new String("abc") 创建了几个对象?

答案是2个,大家肯定都知道。面试中经常出现的问题,今天认真分析一下。 1、 Sting s    定义了一个变量s,没有创建对象; 2、 =    赋值,将某个对象的引用(句柄)赋给s ,没有创建...
  • smile0198
  • smile0198
  • 2014年03月28日 22:35
  • 3178

new String创建了几个对象

String str = new String(“abc”)  到底创建了几个对象? 首先String str是定义了一个字符串变量,并未产生对象,=不产生对象,那么只有后面的new String("...
  • w8998036
  • w8998036
  • 2017年02月06日 15:37
  • 1772
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string对象
举报原因:
原因补充:

(最多只允许输入30个字)