什么是"我喜欢Comp Sci!"的类型?我很确定它是字符串还是文字,任何人都可以指出两者之间的区别并帮助我找到答案
可能重复:
字符串对象和字符串文字之间的差异
初始化String对象时,至少有两种方法,例如:
String s = "some string";
String s = new String("some string");
Run Code Online (Sandbox Code Playgroud)
有什么不同?
能否请您澄清一下,在下面的案例中会创建多少个对象?为什么?我对此略感不安.
String s1 = "cat";
String s2 = "cat";
String s3 = "c"+"at";
String s4 = new String("cat");
String s5 = "kitty"+"cat";
String s6 = new String("kittycat");
String s7 = s5;
String s8= new String(s5); // Newly Added in this Question
Run Code Online (Sandbox Code Playgroud) 在面向对象的语言中,新对象的创建是通过使用new关键字(因为java中的内存分配是动态完成的).
即使String是一个类,如何在没有新关键字的情况下创建其对象?
即使它使用字符串池我也无法清楚地理解它: "可以创建一个用户定义的类,我们可以像String一样直接初始化变量"
可能重复:
字符串对象和字符串文字之间的差异
你好,
最重要的是,让我们用String提出Java事实
字符串是不可变的 我的问题 - 如果字符串是不可变的,那么下面的语句应该有编译错误!
String str = "xyz";
or
String str = new String("xyz");
str = "abc"; //COMPILATION ERROR
or
str = new String("abc"); //COMPILATION ERROR
Run Code Online (Sandbox Code Playgroud)
以下实例化有什么区别?
String str = "xyz";
and
String str = new String("xyz");
Run Code Online (Sandbox Code Playgroud)
艾米特.
在java中,String可以通过以下两种方式创建
String foo="Test";String fooobj=new String("Test");在这里,我们提到了这两种创建String的方式之间的区别.我想更多地了解什么是适当的场景,我们应该去哪里
String foo="Test";
Run Code Online (Sandbox Code Playgroud)
什么时候去
String fooobj=new String("Test"); ?
Run Code Online (Sandbox Code Playgroud) 考虑声明:
String s = new String("abc");
这个语句会创建两个String对象,即"abc"和由's'表示的对象吗?
如果它创建了两个对象,那么"abc"会被存储在String池中还是只是被丢弃?
编辑:
我在引用字符串对象和字符串文字之间的差异时提出这个问题,在最后两个答案中,拒绝创建两个对象.
我无法弄清楚是否
String ab = "hello"; //straight initialization
String ab_1 = new String ("hello_1"); //initializing using new
Run Code Online (Sandbox Code Playgroud)
两者都有效,但是
StringBuffer bfr = new StringBuffer("hi"); //works only with new
Run Code Online (Sandbox Code Playgroud)
只有在使用new创建时才有效.
为什么String可以直接实例化,但StringBuffer需要new运算符.有人可以解释我的主要原因.
String s="hi";
String s1=new String("hi");
Run Code Online (Sandbox Code Playgroud)
从内存的角度来看,s和s1存储在哪里?无论是在堆内存还是堆栈中。
s 指向“hi”,s1 指向 hi 所在的内存位置?
请帮忙?
我了解相等运算符会比较对字符串的引用。因此,它将检查字符串是否指向同一对象,而不是每个字符是否相等。
作为学习搜索算法的第一步,我设置了以下程序,该程序中有一个名称数组,然后检查该数组中是否存在某个名称。
第一种方法:
我声明并初始化名称数组。我要求用户输入一个名称,以检查它是否出现在数组中。
这是我使用的代码-
import java.util.Scanner;
public class Strawman{
public static void main(String[] args){
System.out.println("Enter the name to search for:");
Scanner scanner = new Scanner(System.in);
String key = scanner.nextLine();
String[] names = {"alice", "bob", "carlos", "carol", "craig", "dave", "erin", "eve", "frank", "mallory", "oscar", "peggy", "trent", "walter", "wendy"};
for (int i = 0; i < names.length; i++){
if (key == names[i]) {
System.out.println("Index " + i + " has the name " + key);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下屏幕快照显示了该程序的运行之一- …
哪一个是正确的,为什么:
String dynamic = new String();
dynamic = " where id='" + unitId + "'";
Or
String dynamic = " where id='" + unitId + "'";
Run Code Online (Sandbox Code Playgroud)
请提出以上 2 个字符串初始化的区别。
如果我写:
String s = new String("abc");
Run Code Online (Sandbox Code Playgroud)
它创建一个类型String为"abc"的对象.如果我写:
String s = "abc";
Run Code Online (Sandbox Code Playgroud)
这也会创建一个值为"abc"的对象.如何在不遇到新关键字的情况下创建对象.
如果我写:
s.append("def");
Run Code Online (Sandbox Code Playgroud)
它创建了另外两个字符串对象:
a. "abcdef"
b. "def"
Run Code Online (Sandbox Code Playgroud)
因此,在遇到双重引号内的任何内容时,都会创建一个新String对象.这是怎么发生的?