java字符串就是string吗
先你要知道java字符串不是以\0结束。
Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。
学过C/C++的人都有一种固定的思维模式,凡是字符串都是以\0结束,其实C++中未必,不信你查查string这个泛型类,为了与C语言兼容性,它里面有一个方法c_str()就是返回以\0结束的字符串。
* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 * 通过查看API,我们可以知道 * A:字符串字面值"abc"也可以看成是一个字符串对象。 * B:字符串是常量,一旦被赋值,就不能被改变。通过构造方法*public String(String original):把字符串常量值转成字符串
一、从根本上认识java.lang.String类和String池
首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点。从中可以看到:
1、String类是final的,不可被继承。public final class String。
2、String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];
然后打开String类的API文档,可以发现:
3、String类对象有个特殊的创建的方式,就是直接指定比如String x = "abc","abc"就表示一个字符串对象。而x是"abc"对象的地址,也叫
做"abc"对象的引用。
4、String对象可以通过“+”串联。串联后会生成新的字符串。也可以通过concat()来串联,这个后面会讲述。
6、Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,
并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。
5、创建字符串的方式很多,归纳起来有三类:
其一,使用new关键字创建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串联生成新的字符串。比如String s3 = "ab" + "c";
二、String对象的创建
String对象的创建也很讲究,关键是要明白其原理。
原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,
如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢
了!但绝不会在堆栈区再去创建该String对象。
原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
另外,String的intern()方法是一个本地方法,定义为public native String intern(); intern()方法的价值在于让开发者能将注意力集中到
String池上。当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池
中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。
三、不可变类
不可改变的字符串具有一个很大的优点:编译器可以把字符串设置为共享。
不可变类String有一个重要的优点-它们不会被共享引用。
是这样的,JAVA为了提高效率,所以对于String类型进行了特别的处理---为string类型提供了串池
定义一个string类型的变量有两种方式:
string name= "tom ";
string name =new string( "tom ")
使用第一种方式的时候,就使用了串池,
使用第二中方式的时候,就是一种普通的声明对象的方式
如果你使用了第一种方式,那么当你在声明一个内容也是 "tom "的string时,它将使用串池里原来的那个内存,而不会重新分配内存,也就是说,string saname= "tom ",将会指向同一块内存
另外关于string类型是不可改变的问题:
string类型是不可改变的,也就是说,当你想改变一个string对象的时候,比如name= "madding "
那么虚拟机不会改变原来的对象,而是生成一个新的string对象,然后让name去指向它,如果原来的那个 "tom "没有任何对象去引用它,虚拟机的垃圾回收机制将接收它。
据说这样可以提高效率!!!
String是一种数据类型,是一个类,字符串就是String类的对象。
高分java连接SQL server 2000 详细步骤
<ava classpathref="myclasspath" classname="Test" fork="true" \/><target><arget name="clean"><elete includeEmptyDirs="true"><ileset dir="${build.dir}" \/><delete><target><project> 配置Hibernate描述文件 Hibernate描述文件可以是一个properties或xml 文件,其中最重要的是定义数据库的连接。我这里...
对JSP、JavaBean、MVC等进行评价,可正反两方面论述
尽管大多数数据库将空字符串作为空值进行操作,如果我们使用的数据库不支持处理空字符串的话,我们必须写入附加的java代码,来创建自己的SQL插入声明。例如:if(test.length==0){sb.append(“null”);}else{sb.append(test);} JavaBean 的范围:JavaBean 的范围。 Scope 是一个具有生命时间的变量。JavaBean的范围在...
谁知道JavaScript正则表达式该怎么解析?
"java" 的字符串相匹配.虽然正则表达式中的其它字符不是按照字面意思进行匹配的,但它们都具有特殊的意义.正则表达式 \/s$\/ 包含两个字符.第一个特殊字符 "s" 是按照字面意思与自身相匹配.第二个字符 "$" 是一个特殊字符,它所匹配的是字符串的结尾.所以正则表达式 \/s$\/ 匹配的就是以字母 "s" ...
中国那种编程语言最受公司欢迎
ava是一ava是一种由Netscape的Live发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Java...
汇编语言发展史及过程
计算机编程语言的发展,经历了从机器语言,汇编语言,高级语言课程。机器语言 电子计算机。使用由“0”和“1”的二进制数,二进制的计算机语言。开始发明的计算机,只能放下你的谷租嗯计算机语言命令计算机做这做那,一句话,是写一个字符串为“0”和“1”组成的序列,指令由计算机来执行这种语言是机器...
Java培训班一般都教什么内容?
编程有关的操作系统基本使用,HTML5规范、HTML5文档结构、HTML5元素、Web语义化;CSS3规范、CSS3选择器、层叠与继承、盒模型与视觉格式化模型、现代CSS布局、CSS3基本属性千锋教育就有线上免费Java线上公开课。 2、掌握Java Web开发技术:Java开发中使用到的Web前端技术,HTML5+CSS3,JavaScript操作BOM...
Linux中 ps aux |grep java 为什么会将 grep --color=auto java 也显示...
ps会将grep进程的信息也显示出来。为什么ps aux |grep [j]ava就不会出现grep进程本身,因为此时grep进程的参数是grep --color=auto [j]ava,而grep [j]ava正则匹配的是'java'这个字符串,'[j]ava'这个正则表达式并不能匹配'[j]ava'这个字符串,所以自然不会出现grep进程本身。
js选项卡设计的要点有哪些?
alert((msg?msg:’该栏目只能输入英文字符﹐请改正’));s.focus();s.select();return false;}} 21、Jquery的基础选择器有哪几种? 层次过滤器、内容过滤器、表单过滤器分别列举至少三种?基础选择器:ID选择器、类选择器、标签选择器层次过滤器:$(“祖先选择器 所有的后代选择器”)$(“指定的父代对象 > ...
用eclipse运行程序时的问题
尽管大多数数据库将空字符串作为空值进行操作,如果我们使用的数据库不支持处理空字符串的话,我们必须写入附加的java代码,来创建自己的SQL插入声明。例如:if(test.length==0){sb.append(“null”);}else{sb.append(test);} JavaBean 的范围:JavaBean 的范围。 Scope 是一个具有生命时间的变量。JavaBean的范围在...
C语言中,strstr函数的功能是什么?不用库函数,自己写怎么写?
C语言中,strstr函数的功能是寻找字符串中子串出现的位置,自己写的步骤如下。需要准备的材料分别有:电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:。int fun(char *a, char *b){ int i, j, alen = strlen(a)...
巴响洁奈: java中字符串就是String类型的, 字符是char类型, String是一个对象, char只能用来表示一个字符,是java中的基础数据类型.
永安市19493786131: 我是一个java初学者,分不清字符串与字面量的区别 - ?
巴响洁奈: 这个问题其实牵扯就有点多了 在java里,除了int,long等基本类型外 其余都是类,包括String,所以String是个类,他是个封装了操作字符串的方法的类 比如String s=new String("a string")"a string"是个字符串对象 s也是个字符串对象,使用String类的构造器方法构造的一个字符串实例(对象) 字符串在java中就是一个对象 一般来说,String都是指String这个类(首字母大写),string指的是字符串年 说的不清楚,建议去看看thinking in java,我想你应该是学过其他语言的,所以这本书应该比较适合你肯,里面讲面向对象思想讲的很好
永安市19493786131: JAVA中String是一个类还是一种基本类型? - ?
巴响洁奈: String 是一个字符串类 类的定义方法:String str = new String ("hello"); 只不过它也可以: String str = "hello"; 基本类型就8个 byte、 short、 int、 lang float、 double boolean char
永安市19493786131: java 中String和string区别 - ?
巴响洁奈: java中String是一个类,它代表的字符串,Java 程序中的所有字符串字面值(如 "abc" )都可作为此类的实例实现. string 在java中,跟上面说的一样,只可以作为自定义的一个变量.
永安市19493786131: JAVA 中STRING 是用来干什么的 - ?
巴响洁奈: String 是一个字符串类,String可以用来申明字符串,而他的构造方法String()可以创建一个字符串对象.
永安市19493786131: java中string类型是什么意思 - ?
巴响洁奈: String是字符串类型,他是一个对象,在java中,比如: String s="hello";创建了一个字符串常量s,赋值为hello String ss = new String("hello"); 创建了一个String对象ss,这个对象的引用是ss,它的值在堆内存中是hello
永安市19493786131: java中string是什么? - ?
巴响洁奈: 就是那个意思. String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.字符串是常量;它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以可以共享.例如:String str = "abc";等效于:char data[] = {'a', 'b', 'c'};String str = new String(data);
永安市19493786131: java字符串类 怎么用 - ?
巴响洁奈: java的字符串类是String,它有两种定义方法,例如:String zl=“hello world“;或 String zl=new String("hello world");利用length()可以统计字符串的长度;
永安市19493786131: Java中的到底又没有string,怎么有的说的是无string,而只有String呢? - ?
巴响洁奈: java肯定有String 问这个问题绝对是初学者 java中对大小写控制的比较严格 说起string 和String这要从C#开始,如果你有接触过C#你会发现java和C#不仅仅是相似,简直就是一样了 这两家公司又经常打架,所以说书写格式以及编码略有不同.而java诞生于C之后,java自主书写限制了大小写的规范,于C#有区别,所以string 不能被定义 String代替string
永安市19493786131: 在Java中String和toString有什么区别?? - ?
巴响洁奈: String是java的一个最终类,不能被继承的.它的作用是构造字符串,用法就是 String str = new String(),这样得到的是一个空字符串,String str = new String(“aa”),这样就得到一个通过构造函数构造的字符串“aa”,当然为了方便java允许像基本类型那样使用,就是String s = "aa" . toString(),是Object基类的一个输出字符串的方法,任何类都会继承这个方法,如果不重写,那么它就会输出类名+@+hashCode值