一个常见的面试题:
1:
String str = new String("aaa");
String str1 = "aaa"
String str2 = new String("aaa");
System.out.println(str == str1);
System.out.println(str == str2);
System.out.println(str1 == str2);
问题:前3行代码分别创建对象的情况?
答:String str = new String("aaa");这行创建2个对象;首先是"aaa",先到String池里看看有没有"aaa"这个对象,没有就创建对象,所以先创建在池里创建"aaa"对象,接着new语句又创建一个对象,也是"aaa",但这个对象在堆里;String str1 = "abc";直接去池里找有"aaa"这个对象,此时能找到,所以就不创建对象;String str2 = new String("aaa");同样的道理,直接在堆里创建一个对象;所以一共创建了3个对象。输出是:false,false,false;
2:
System.out.println(str == str1.intern());
System.out.println(str == str2.intern());
System.out.println(str1 == str2.intern());
intern()就是返回String池里边对应字符串内容的对象,所以输出为:false,false,true
3:String s1 = "world";
String s2 = "wo";
String s3 = "rld";
System.out.println(s1 = "wo" + "rld");
System.out.println(s1 = "wo" + s3);
"wo" + "rld"直接返回字符串池中的对象,所以第一个输出true;而"wo"+s3在返回堆里的"world"对象,输出false;自然总共创建4个对象。
分享到:
相关推荐
### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...
首先,我们来了解一下编译期的`String`对象创建,这通常与字符串字面量有关。在Java源代码中,当使用双引号定义一个字符串,例如`"hello"`,Java编译器会将这些字面量字符串存储在常量池中。这种方式创建的`String`...
实际上创建了两个 String 对象,一个是”abc”对象,存储在常量空间中,一个是使用 new 关键字为对象 s 申请的空间。 二、字符串的常见操作 字符串的常见操作包括 charAt 方法、compareTo 方法、concat 方法等。 ...
Java 中颜色的 String 和 Color 对象之间的互相转换 在 Java 中,颜色的表示形式有多种,包括字符串形式和 Color 对象形式。这两种形式可以互相转换,本文将介绍 Java 中颜色的 String 和 Color 对象之间的互相转换...
// 转换为String对象 ``` 4. **intern() 方法**: `String`类的`intern()`方法用于获取常量池中的字符串引用。如果常量池中已存在该字符串,则返回其引用;否则,将字符串添加到常量池并返回引用。例如: ```...
JAVA 面试题解惑系列之 String 对象创建机制 本文将深入探讨 JAVA 中 String 对象的创建机制,解答常见的面试题目,并探索 String 对象池的概念和机制。 一、String 对象的创建方式 在 JAVA 中,String 对象可以...
当Java程序启动时,所有命令行参数都会被封装为String对象,并放入一个String数组中,然后作为参数传递给main方法。 3. 自动装箱操作 在Java中,基本数据类型和它们对应的包装类对象之间可以自动转换,这种转换过程...
### String类创建对象问题 #### 一、String 类与常量池、字符串池的基本概念 在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`...
在 Java 中,可以使用两种方式创建 String 对象:一种是使用字面值赋值方式,例如 `String s = "a";`;另一种是使用 new 关键字,例如 `String s = new String("a");`。这两种方式创建的 String 对象有很大的区别。...
当你创建一个新的`String`对象时,如果常量池中已经存在相同内容的字符串,那么会直接返回该对象的引用,而不是创建新的实例。 字符串的常用方法包括: 1. `length()`:返回字符串的长度,即包含的字符数。 2. `...
Java String 创建对象实例解析 Java String 创建对象实例解析是 Java 语言中一个重要的概念,它涉及到字符串对象的创建、内存分配、垃圾回收等方面。在 Java 中,String 是一个特殊的类,它既是类也是对象。下面...
在Java中,如果我们使用字面值方式创建的String对象,它们是常量池中的字符串常量,如果我们使用new关键字创建的String对象,它们是运行时创建的新对象。例如,String s0="kvill";,String s1=new String("kvill");...
这一特性对于Java内存管理有着重要影响,因为String对象会存储在方法区的字符串常量池中,以避免重复创建相同的字符串,从而提高内存使用效率。 在JDK 8版本中,字符串常量池的位置发生了变化,从方法区移至Java堆...
在Java编程语言中,字符串(String)是一个非常基础且重要的数据类型。它被广泛用于存储文本信息,而关于字符串创建的理解,以及"equals()"方法和"=="运算符的区别,是每个Java开发者都应深入掌握的知识点。 首先,让...
在Java编程语言中,String对象被认为是不可变的。这个特性是Java设计者为了优化性能、安全性和线程安全性而有意设定的。理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多...
### 创建string对象过程的内存分配详解 #### 一、引言 在Java中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。`String` 对象的创建涉及复杂的内存分配机制,特别是在Java虚拟机 (JVM) 的环境中...
在Java编程中,String对象和Byte类型的转换是常见的操作,特别是在网络编程中,因为网络通信通常涉及字节流的处理。下面将详细讲解Java中如何进行这两种类型之间的转换,并探讨其在网络编程中的应用。 首先,让我们...
`String Pool`是存储`String`字面量的缓存池,当通过字面量的方式创建`String`对象时,Java虚拟机首先检查`String Pool`中是否已经存在相同的字符串,如果存在,则返回该字符串的引用,而不是创建一个新的对象。...
`String`类代表不可变的字符序列,这意味着一旦创建了`String`对象,它的值就不能改变。这个特性使得`String`在处理文本时既安全又高效。 ### 1. `String`类的构造方法 `String`类提供了多种构造方法,允许我们以...