关于String:
1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
常量池(constant pool):
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
字符串池:
在JVM中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
public class Test {
public static void main(String args[]) {
String str0 = "abc";
String str1 = "abc";
String str2 = "a" + "bc";
System.out.println(str0 == str1);
System.out.println(str0 == str2);
}
}
运行结果: true true
2:
public class Test {
public static void main(String args[]) {
String str0 = "abc";
String str1 = new String("abc");
String str2 = "a" + new String("bc");
System.out.println(str0 == str1);
System.out.println(str0 == str2);
System.out.println(str1 == str2);
}
}
运行结果: false false false
因为new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
public static void test3() {
String a = "a";
String b = a + "b";
String c = "ab";
String d = new String(b);
println(b == c);
println(c == d);
println(c == d.intern());
println(b.intern() == d.intern());
}
这段代码与上一个例子类似,只是增加了 intern()的调用。同样的,我们可以先看看输
出是什么。
false
false
true
true
String.intern(): 存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个 方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用.
写一个方法来检查输入的字符串是否是回文(对称)?
private static boolean isPalindrome(String str) {
if (str == null)
return false;
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.reverse();
return strBuilder.toString().equals(str);
}
有时候,面试官要求不使用任何其他类来检查这一点,在这种情况下,我们可以从两端String中的字符进行比较,以找出是否是回文与否。
private static boolean isPalindromeString(String str) {
if (str == null)
return false;
int length = str.length();
System.out.println(length / 2);
for (int i = 0; i < length / 2; i++) {
if (str.charAt(i) != str.charAt(length – i – 1))
return false;
}
return true;
}
写一个方法从字符串中删除给定的字符?
我们可以使用的replaceAll方法替换字符串的中的字符。
private static String removeChar(String str, char c) {
if (str == null)
return null;
return str.replaceAll(Character.toString(c), “”);
}
如何在java程序比较两个字符串?
Java的String实现Comparable接口,使用对象的compaareTo 方法比较两个字符串的大小。
我们可否在switch 条件中使用字符串?
这是一个用来检查你的当前Java发展的知识一个棘手的问题。 在Java 7是可以的,而早期的Java版本不支持这个。
相关推荐
String对象的创建问题,分为:编译期和执行期 详细的讲解String对象创建问题
c++中由类名(string)创建这个类对象(RTTI)
要笔试或者要面试JAVA的可以看看!(更新中....)
String类使用(创建字符串对象、比较、长度、连接、截取、查找和替换、切割和拆分、和其他类型的转换、格式化、判断、手动入池、其他操作) StringBuffer类 StringBuilder类 String、StringBuffer和StringBuilder的...
由于String类是不可变的,对字符串进行操作时需要创建新的字符串对象,这可能会导致性能问题。StringBuilder类是可变的,可以避免这种问题,因此它的性能比String类更好。 三、String类和StringBuffer类有什么区别?...
创建string对象过程的内存分配&&包含多个例子,更加容易理解~~
对String创建几个对象代码详解,包括字符串相加,对象相加等等
详细总结了java中创建对象的不同方式和String创建对象的不同方式
可能创建一个对象,或者不创建对象(当创建一个对象时,如果栈上该值存在,那么会直接引用,否则会创建)。 String str1 = new String("ABC"); String str2 = new String("ABC"); System.out.println(str1 ...
java面试的疑惑剪辑 博文链接:https://z-jq1015.iteye.com/blog/248599
string类是Java中的一种数据类型,用于表示文本字符串。它是不可变的,也就是说一旦创建了一个字符串对象,它的值就不能被修改。字符串类提供了许多方法来操作字符串,包括拼接、比较、截取和搜索等。 可以使用字符...
掌握String字符串对象的创建 掌握字符串对象的输入与输出 一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用呢? 引入 例如 ...
在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类...
创建对象(Object):使用类作为蓝图来创建实际的对象。这可以通过使用new关键字和类构造函数来完成。 java Person person1 = new Person("John Doe", 30); 访问对象属性(Attributes):一旦对象被创建,你就可以...
1、创建String对象 在JavaScript中可以使用一对单引号或双引号将任意多个字符引起来,即生成字符型数据。这些字符型数据实际上也是构造函数String的实例,即String对象。 6.4.1 String对象 2、String对象常用属性及...
1) 创建一个只能容纳String对象名为names的ArrayList集合; 2)按顺序往集合中添加5个字符串对象:"张三"、"李四"、"王五"、"马六"、"赵七"; 3)对集合进行遍历,分别打印集合中的每个元素的位置与内容; 4)打印...
(1)编写一个复数类...7)String toString()//返回复数对象对应的串(如4+7i) (2)编写一个主类,定义并实例化两个复数对象,输出这两个复数对象的值,然后进行复数的加法和减法运算,输出其运算结果(对象)的值。
练习1(基础): 建立一个学生类,其中成员变量为学号、姓名、及三门课的成绩(数组),另建立一个包含主方法的类,定义2个学生类的对象 ...(3)在main方法中分别调用不同的构造方法创建的对象,并输出其属性值