`

String相关

 
阅读更多

问题1:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);

这里的结果是true. 由于字符串是常量(内存中创建对象后不能修改), 而且字符串在程序中经常使用. 所以Java对其提供了缓冲区. 缓冲区内的字符串会被共享. 使用双引号的形式定义字符串常量就是存储在缓冲区中的. 使用"abc"时会先在缓冲区中查找是否存在此字符串, 没有就创建一个, 有则直接使用. 第一次使用"abc"时会在缓冲区中创建, 第二次则是直接引用之前创建好的了.


问题2:

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);

这里的结果是false. 使用构造函数创建的字符串都是在缓冲区外面创建一个新的. 所以只要是使用构造函数创建的字符串, 和任何字符串都不会相等.


问题3:

String s1 = "abc";
String s2 = "a";
String s3 = "bc";
String s4 = s2 + s3;
System.out.println(s1 == s4);

这里的结果是false. Java中字符串的相加其内部是使用StringBuilder类的append()方法和toString()方法来实现的. 而StringBuilder类toString()方法返回的字符串是通过构造函数创建的.


问题4:

String s1 = "abc";
String s2 = "a" + "bc";
System.out.println(s1 == s2);

这里的结果是true. 其实这里的s2并没有进行字符串相加, 两个双引号形式的字符串常量相加, 在编译的时候直接会被转为一个字符串"abc".


问题5:

String str = "abc";
str.substring(3);
str.concat("123");
System.out.println(str);           

这里结果是"abc". 由于字符串是常量(内存中创建对象后不能修改), 该类中所有方法都不会改变字符串的值. 如果希望使用一个可变的字符串, 可以使用StringBuilder或StringBuffer类.

 

问题6:

Java中 String s = "aa" + "bb" 创建了几个对象?

 

标准答案 只建立一个对象 ! 
String s ="aa"+"bb", 
在编译时候进行了优化处理。变成 String s ="aabb"; 这个和java 本身没关系。这是编译优化原理,
编译器对常量运算,会进行优化。
分析一下.class 文件就知道了。
如果是这样情况就不一样了!
String s1="aa";
String s2="bb"+s1;
这个创建几个对象呢。真确的是编译后有两个对象会产生:“aa","bb".
运行时又产生对象s2(严格说是个对象的引用)
总结,编译器对,常量运算,会进行编译优化处理。
但对于带有变量的运算。只有运行程序才进行处理!
分享到:
评论

相关推荐

    protobuf根据DebugString输出字串反解pb对象的实例(C++)

    使用过protobuf的同学肯定对pb的DebugString相关方法再熟悉不过了,其作用就是打印输出pb对象。有些时候我们可能会有根据这个输出还原原始pb对象的需求。仔细观察发现输出并不是标准json格式,也就是说基于json→pb...

    JAVA_String

    在本文中,我们将深入探讨`JAVA_String`相关的知识点,包括其创建、操作、比较以及内存管理等方面。 首先,`String`类位于`java.lang`包中,这意味着在编写Java程序时,我们无需显式导入它。`String`对象一旦创建,...

    C 里和string有关的函数详解

    与字符串相关的函数可以帮助我们更加高效地完成字符串的复制、连接、比较等任务。以下是对几个关键字符串处理函数的详细解析: ### 1. `strdup` #### 函数原型: ```c char* strdup(const char *s); ``` #### 函数...

    String对象创建问题

    首先,我们来了解一下编译期的`String`对象创建,这通常与字符串字面量有关。在Java源代码中,当使用双引号定义一个字符串,例如`"hello"`,Java编译器会将这些字面量字符串存储在常量池中。这种方式创建的`String`...

    10个有关String的面试问题Java开发Java经验技

    理解并掌握这些String相关的知识对于Java开发者来说至关重要,尤其是在面试中能够展示出对字符串处理的深入理解和性能优化能力。在实际开发中,根据具体需求选择合适的方法处理字符串,不仅可以提高代码的可读性,还...

    string_Linuxstring函数_string_

    除了这些基本的`string`函数外,还有一些其他相关的函数,例如`strncpy`(安全版的字符串复制,可以指定最大复制字符数)、`strncat`(限制长度的字符串连接)、`strncmp`(限制长度的字符串比较)以及`strchr`和`...

    有关String的测试程序包含string内部一些函数

    在Java编程语言中,`String`类是使用最广泛的类之一,它代表不可变的字符序列。本测试程序旨在深入理解和探索`String`类的一些核心功能和内部机制。以下是一些关于`String`类的关键知识点: 1. **不可变性**:`...

    string 对象 与json互转

    与此相关的,`String`对象是Java编程语言中的基础类型,用于存储和处理文本数据。在实际开发中,我们经常需要在`String`对象与JSON对象之间进行转换,以满足不同的需求。本文将深入探讨`String`与JSON的互转方法,并...

    Android String字符串数组动态增加

    在Android开发中,String字符串数组是一种常见的数据结构,用于存储一系列相关的文本信息。在某些情况下,我们可能需要在运行时动态地向已存在的字符串数组中添加元素,而非仅仅在XML资源文件中静态定义。这就涉及到...

    Excel和String.xml 互相转换工具

    `libs`目录可能包含项目依赖的外部库,而`files`目录可能包含了与转换工具相关的其他文件,如样例数据或配置文件。 这个工具的使用流程可能包括以下步骤: 1. 导入`String.xml`:将应用中的`String.xml`文件导入...

    double to string

    以下是一些主要编程语言的转换方式及相关的知识点: 1. **Java** 在Java中,你可以使用`String.valueOf()`函数将`double`转换为`String`: ```java double num = 3.14159; String strNum = String.valueOf(num)...

    有关Java String常用方法的总结.docx

    在这个文档中,我们主要讨论了关于Java String类的一些常用方法以及与String相关的常量池问题。 首先,我们要理解Java中的final关键字。当final修饰一个引用变量时,它确保这个引用变量一旦被初始化,就不能再指向...

    标准C++中string用法详解

    ### 标准C++中string用法详解 #### 一、C++标准库中的`string`类型使用 在ANSI标准C++中,`string`是处理文本数据时非常重要的工具...掌握了这些知识后,我们可以更加高效地使用`string`来处理各种字符串相关的任务。

    Android byte[] 和 String互相转换

    `android.util.Base64`类提供了相关功能。 ### 四、示例应用 在Android开发中,这种转换常见于以下场景: - 存储用户设置或偏好到SharedPreferences时,可能需要将字符串转换为字节数组。 - 文件操作,如读取或...

    Java中字符串常见题之String相关讲解

    Java中字符串常见题之String相关讲解 Java中的字符串是非常常见的类,但是很多人不知道String的工作原理和特性。本文将从以下几个方面对String进行讲解:引用和对象的存储、String对象不可变、String创建对象的形式...

    Android图片Bitmap和字符串String之间的相互转换

    在Android开发中,处理图像数据...理解并熟练运用这些转换技巧,能够帮助开发者解决各种与图像相关的挑战,提高应用的用户体验。在具体实践中,可以根据需求选择合适的编码方式,并注意性能优化,以确保应用运行流畅。

    《C++String深入详解2.0版》PDF

    ### C++ String 深入详解 #### 一、C++ 的 `std::string` 使用 **1.1 C++ `std::string` 简介** `std::string` 是 C++ 标准库中的一个类,用于处理字符串。它提供了一种更安全、更方便的方式来操作字符串数据,...

    android String.xml Excel 相互转换工具

    对于Eclipse用户,可以搜索相关的插件集成到开发环境中,或者单独使用命令行工具配合版本控制系统(如Git)来管理和同步`String.xml`与Excel文件。 总的来说,`android String.xml Excel 相互转换工具`是Android...

    StringUtil.rar

    `StringUtil`可能包含了一些与正则表达式相关的函数,如`match(const std::string &str, const std::string &pattern)`或`extract(const std::string &str, const std::string &pattern)`,前者用于检查字符串是否...

    String实例

    本篇将深入探讨如何在C库的基础上,手动自定义`String`原型,实现一个基本的`String`类,并涵盖其相关的成员函数。 首先,我们要明确`String`类的基本结构。一个简单的`String`类可能包含一个字符数组(char*)来...

Global site tag (gtag.js) - Google Analytics