String的特性

1 String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
2 String是一个final类,代表不可变的字符序列。
3 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
4 String对象的字符内容是存储在一个字符数组value[]中的

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0

String对象的创建

String str = "hello";
//本质上this.value = new char[0];
String  s1 = new String();
//this.value = original.value;
String  s2 = new String(String original);
//this.value = Arrays.copyOf(value, value.length);
String  s3 = new String(char[] a);
String  s4 = new String(char[] a,int startIndex,int count);

String类型的概述总结

package BaiYSExer1;/*** @author Bys* @create StringTest-03-14-9:55*/
/*
String的特性String:字符串,使用一对""引起来表示1.String声明为final的,不可以被继承2.String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小3.String内部定义了final char[] value用于存储字符串数据4.String:代表不可变的字符序列。简称:不可变性。体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。2.当对现有的字符串进行连接操作时,也需要重新指定内存区赋值,不能使用原有的value赋值。3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区赋值,不能使用原有的value赋值5.通过字面量的方式(区别于new)给定一个字符串赋值,此时的字符串值声明在字符串常量池中6.字符串常量池中是不会存储相同内容的字符串的。*/
public class StringTest {public static void main(String[] args) {/*String的实例化方式:方式一:通过字面量定义的方式---->String s1 = "nbkelas";方式二:通过new+构造器的方式---->String s3 = new String("nbkelas");面试题:String s = new String("abc");方式创建对象,在内存中创建两个对象一个是堆空间中的new结构,另一个是char[]对应的常量池中的数据"abc"*///字符串常量存储在字符串常量池,目的是共享//字符串非常量对象存储在堆中String s2 = "nbkelas";String s1 = "nbkelas";String s4 = new String("nbkelas");String s3 = new String("nbkelas");System.out.println(s1 == s2);//trueSystem.out.println(s1 == s3);//falseSystem.out.println(s1 == s4);//falseSystem.out.println(s3 == s4);//falseSystem.out.println("************************************");/*//字符串的特性常量与常量的拼接结果在常量池。且常量池中有一个特性,就是常量池中不会存在相同内容的常量。只要其中有一个结果是变量,结果就在堆中如果拼接的结果调用intern()方法,返回值就在常量池中。*/String ss1 = "hello";String ss2 = "world";String ss3 = "hello"+"world";String ss4 = ss1+"world";String ss5 = ss1+ss2;String ss6 = (ss1+ss2).intern();System.out.println(ss3==ss4);//falseSystem.out.println(ss3==ss5);//falseSystem.out.println(ss4==ss5);//falseSystem.out.println(ss3==ss6);//true/*最后总结一下String类型的使用陷阱String s1 = "a";说明:在字符串常量池中创建了一个字面量为"a"的字符串。s1 = s1 + "b";说明:实际上原来的“a”字符串对象已经丢弃了,现在在堆空间中产生了一个字符串s1+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。String s2 = "ab";说明:直接在字符串常量池中创建一个字面量为"ab"的字符串。String s3 = "a" + "b";说明:s3指向字符串常量池中已经创建的"ab"的字符串。String s4 = s1.intern();说明:堆空间的s1对象在调用intern()之后,会将常量池中已经存在的"ab"字符串赋值给s4。*/}
}

Java中String类型的概述相关推荐

  1. java string设置编码_详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着, ...

  2. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  3. java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  4. java中数组的返回值是什么类型_面试必问:Java中String类型为什么设计成不可变的?...

    这几天在各大平台上都看到过这样一些帖子,全都是关于String类型对象不可变的问题,当然现在也是找工作的准备时期,因此花了一部分时间对其进行整理一下. 想要完全了解String,在这里我们需要解决以下 ...

  5. java中string类型的哈希值是怎么计算的

    在 Java 中,字符串类型的哈希值是通过 String 类的 hashCode() 方法计算的.这个方法会通过将字符串的每个字符转换成一个整数,然后将它们进行某种数学运算来得到最终的哈希值. 具体来 ...

  6. Java中String类型的数据比较

    在Java中如果想比较两个字符串是否相等,可以使用string1==string2 或string1.equal(string2)来比较. 但是,第一种方法过于局限.例如, String string ...

  7. java中String类型对象在克隆时候的特殊性

    查看原码可知 String类型被final所修饰,不可对它的实例进行修改 即:String类型的实例是一个常量,跟八大基本类型 int .double等一样 但根据我们所学到的,String是一个引用 ...

  8. Java中String类型与Map类型互转

    一.mapString与Map之间互转 1.map类型转换成string类型 Map<String, String> map = new HashMap<String, String ...

  9. java中string类型如何接收_java中的string类型全面解析

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

最新文章

  1. 线性布局上的一个小错误
  2. vlan简介,access、trunk、hybrid的区别
  3. Android命令行工具logcat详细用法!
  4. c语言错误指导,c语言编程指导.pdf
  5. 解决Ubuntu16.04 fatal error: json/json.h: No such file or directory
  6. 2018.01.01(数字三角形,最长上升子序列等)
  7. Java中判断字符串是否为数字的五种方法
  8. 一份完整的问卷模板_如何写出一份优秀的个人简历?
  9. PyTorch 1.6、TensorFlow 2.3、Pandas 1.1 同日发布!都有哪些新特性?
  10. java微信公众号百度地图,微信公众号集成百度地图api,实现收货地址选择
  11. 0x00000050蓝屏(0x00000050蓝屏 xp)
  12. SQL Server数据库的创建方法
  13. 名帖222 赵孟頫 行书《行书三段卷》
  14. Excel怎么设置每页都打印标题行?
  15. 图像处理相关算法之饱和度调整
  16. 华为 H3C 配置 Portal认证 mac-trigger快速认证 Mac无感知认证 Radius认证计费 对接 外部Portal认证计费系统 案例
  17. Tuxera NTFS Mac2022mac写入ntfs移动硬盘插件
  18. 2021年5月国产数据库排行榜:阿里系“OPA”持续攀升,华为“高斯模式”获成功...
  19. 【php】获取路径(目录)
  20. WPS2019设置自动保存方法

热门文章

  1. php怎样创建csv文件,如何使用PHP创建CSV文件?(代码示例)
  2. Mac OS X 下文件名乱码出现的原因和解决方法
  3. 调整了canvas的高度页面变化后还原_Web 页面录屏实现
  4. NOI数据结构:后缀数组
  5. 4.2 算法之数论 185 反正切函数的应用 scratch
  6. es6 filter函数的用法_Python 函数式编程指北,不只是面向对象哦!超级详细!
  7. Linux学习之内核模块编程
  8. 基于php的选课系统设计(含源文件)
  9. java引用数据类型可以更改类型_java,基本数据类型和引用数据类型
  10. divcss布局模板代码_CSS3布局(前端所必须要掌握)