徐州网站建设市场创建网站大约多少钱
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:06
当前位置: 首页 > news >正文
徐州网站建设市场,创建网站大约多少钱,企业网站设计与实现,长沙软件公司有哪些一、String
1、简介
String 是 Java 中使用得最频繁的一个类了#xff0c;不管是作为开发者的业务使用#xff0c;还是一些系统级别的字符使用#xff0c; String 都发挥着重要的作用。String 是不可变的、final的#xff0c;不能被继承#xff0c;且 Java 在运行时也保…一、String
1、简介
String 是 Java 中使用得最频繁的一个类了不管是作为开发者的业务使用还是一些系统级别的字符使用 String 都发挥着重要的作用。String 是不可变的、final的不能被继承且 Java 在运行时也保存了一个字符串池(String pool) 就使得 String 变得很特殊。实现三个接口java.io.Serializable, Comparable, CharSequence
2、String对象两种创建方法
// 1编译时就确定了字符串的内容
String strComplier A;
// 2new只有运行时才能确定字符串的内容
String strNew new String(A);String strComplier “A”;
Java 程序在运行的时候会维护着一个常量池编译期生成的各种字面量和符号引用会在类加载后进入方法区的运行时常量池。对于上述这种实现字符串的方式就可以在编译的时候确定字符串的内容因此这一行生成的内存结构就如下图。 不严谨的讲虚拟机栈中的 strComplier 存储的就是 A 在常量池中的地址。 String strNew new String(“A”);
因为使用的 new 的方式所以这句代码只有运行的时候才能确定字符串的内容。而对于 new 关键字java 是将对象的实例数据存放堆上的但是又因 String 常量池的存在因此实际上在堆上的 String 对象的数据又指向了字符串常量池。 不严谨的讲虚拟机栈中的 strNew 存储的就是 strNew 这个对象在堆内存的地址而 strNew 中的字符串数据又指向了常量池中的 A
3、比较 和 equals() 比较两个对象的引用是否相等也就是说比较两个地址是否相等
//true : 地址相同
String a A;
String a1 A;
System.out.println(a1 a); //指向的都是 A 的地址地址相同返回的是 true//false : 地址不同在堆中是两个不同的对象虽然指向常量池中的同一个值 A
String b new String(A);
String b1 new String(A);
System.out.println(bb1);//分别指向的是在堆内存上的不同对象的地址地址不同返回的是 false//false : 地址不同
String c A;
String c1 new String(A);
System.out.println(c c1);//一个指向常量池一个指向堆返回 false//true : 地址相同
String d A;
String d1 d;
System.out.println(d d1);//把d中的 常量池地址 赋给d1返回 true//true : 地址相同
String a A1;
String a1 A 1;//编译时已确定
System.out.println(a a1);//true//false : 地址不同
String b A1;
String b1 A;
String b2 b1 1;//编译时不确定
System.out.println(b b2);//falseequals 比较的两个对象是否相等也就是说是同一个对象在jvm堆内是惟一的 String类对equals()方法进行了重写只有值相等才为true
//equals方法源码
public boolean equals(Object anObject) {//判断是否是相同对象if (this anObject) {return true;}//判断anObject是否是String类型if (anObject instanceof String) {// String aString (String)anObject;//判断编码是否相同if (coder() aString.coder()) {////比较两个字符串是否完全相等return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value);}} return false;
}String stringCompiler A;
String stringNew new String(A);
StringBuilder stringBuilder new StringBuilder(A);
StringBuffer stringBuffer new StringBuffer(A);
//不是相同对象
System.out.println(stringCompiler stringNew); // false
//不是相同对象但都是String类型编码、字符值都相同
System.out.println(stringCompiler.equals(stringNew)); // true
//stringBuilder不是String类型
System.out.println(stringCompiler.equals(stringBuilder)); // false
//stringBuffer不是String类型
System.out.println(stringNew.equals(stringBuffer)); // false比较equals()String s1 new String(“java”); String s2 new String(“java”);falses1、s2在堆中是不同的对象地址不同虽然都指向了常量池中的’javatrueString类对equals()进行了重写只要值相同就返回trueString s1 new String(“java”); String s2 s1;true同一对象地址相同值相同true同一对象地址相同值相同String s1 “java”; String s2 “java”;true编译时值已确定指向常量池中同一地址true值相同
4、final
String 是 final 也就是String 是不可变的。即一个 String 对象创建之后所有对它修改后的字符串都是新生成的 String 对象。String 设计成 final 主要有如下原因 实现字符串常量池只有当字符串是不可变时字符串池才有可能实现字符串池的实现可以在运行时节约很多 heap 空间因为不同的字符串变量都指向池中的同一个字符串即可以实现多个变量引用 JVM 内存中的同一个字符串实例如果字符串不是不变的String interning 将不能实现(String interning 是指对不同的字符串仅仅只保存一个即不会保存多个相同的字符串)因为这样的话如果变量改变了它的值那么其它指向这个值的变量的值也会一起改变。安全问题在系统中有很多地方都是以字符串的形式存在的比如数据库的用户名Socket 的主机和端口当你在调用其他方法比如调用一些系统级操作之前可能会有一系列校验如果是可变类的话可能在你校验过后其内部的值被改变了可能引起严重的系统崩溃问题。缓存提升性能String 大量运用在哈希的处理中由于 String 的不可变性可以只计算一次哈希值然后缓存在内部后续直接取就好了字符串的处理速度要快过其它的键对象这就是 HashMap 中的键往往都使用字符串的原因。线程安全因为字符串是不可变的所以是多线程安全的同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。
5、编码与解码
//编码
String.getBytes()//方法是得到一个操作系统默认的编码格式的字节数组。
String.getBytes(String decode)//方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示//解码
new String(byte[] b,String decode)//按照指定的方法编码示例
//编码解码一致正确输出
byte[] b_gbk 中.getBytes(GBK);
String s_gbk new String(b_gbk,GBK);
System.out.println(s_gbk);//中//编码解码不一致输出乱码
byte[] b_gbk 中.getBytes(GBK);
String s_utf8 new String(b_gbk,UTF-8);
System.out.println(s_utf8);//二、StringBuffer
final不能被继承不能有子类线程安全通过append、insert进行字符串的操作实现接口java.io.Serializable, CharSequence
三、StringBuilder
final不能被继承不能有子类线程不安全通过append、insert进行字符串的操作实现接口java.io.Serializable, CharSequence
四、三者比较
比较StringStringBufferStringBuilder继承性finalfinalfinal实现接口SerializableComparableCarSequenceSerializableCarSequenceSerializableCarSequence速度慢中快线程安全性线程安全线程安全线程不安全常用方法equals()append()insert()append()insert()适用场景少量的字符串操作多线程下的大量操作单线程下的大量操作
- 上一篇: 徐州网站建设的特点做网站的前提
- 下一篇: 徐州网站建设市场杭州做网站要多少钱
相关文章
-
徐州网站建设的特点做网站的前提
徐州网站建设的特点做网站的前提
- 技术栈
- 2026年04月20日
-
徐州网站建设大前端网站备案主体修改
徐州网站建设大前端网站备案主体修改
- 技术栈
- 2026年04月20日
-
徐州网站建设大前端网页特效大全
徐州网站建设大前端网页特效大全
- 技术栈
- 2026年04月20日
-
徐州网站建设市场杭州做网站要多少钱
徐州网站建设市场杭州做网站要多少钱
- 技术栈
- 2026年04月20日
-
徐州网站建设制作公司网站模板下载网站有哪些内容
徐州网站建设制作公司网站模板下载网站有哪些内容
- 技术栈
- 2026年04月20日
-
徐州网站开发如何电子商务网站流程图
徐州网站开发如何电子商务网站流程图
- 技术栈
- 2026年04月20日
