java小问题 一个类 在定义时就被初始化了的String域,以及别一个通过构造器初始化的String域,这两种方式有什么差异? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一种是在定义时就被初始化了的String域,另一种是通过构造器初始化的String域 class S1{ // 在定义时就被初始化了的String域,不要这样写 String s="a";}class S2{ String s; //通过构造器初始化的String域 public S2(String s){ this.s=s; } }public class Test{ public static void main(String[] args){ S1 s1=new S1(); S2 s2=new S2("bbb"); System.out.println(s1.s); System.out.println(s2.s); }}后者可以通过main改变s的值,而前者s的值是写死了的 前者性能高,后者性能低。因为一个常量字符串本身就是一个String,前者只是引用存在的String对象,而后者会创建一个新的String对象。 别乱说啊,只要不是private的,都可以直接修改的s1.s = "ffff";其实最大的不同就是类的生命周期中初始化的顺序不同。初始化的时间不同。 四楼说的:只要不是private的,都可以直接修改的s1.s = "ffff";实际项目中最好不要出现这种类和这种用法。 初始化的顺序不同:public class Test { static { } { } private static String s1 = "a"; private static String s2 = "b"; public Test() { } public static void print() { } public void display() { }} public class Student { String name="tom";}public class Test { String a; Student s;public static void main(String[] args) { test t=new test(); String a=new String("a"); t.aa(a); System.out.println(t.a); a=new String("b"); System.out.println(t.a) a="a"; t.aa(a); System.out.println(t.a); a="b"; System.out.println(t.a"); Student s=new Student(); t.ss(s); System.out.println(t.s.name); s.name="t"; System.out.println(t.s.name);}}结果 前4 个 都是 输出 字符串 a后面 2个 tom和t通常情况先 通过方法传参数 穿的是引用 你所定义的变量 随着 引用 的改变 而改变 这点可以从 最后 2个输出结果看出来 前4个 结果说明像 String 这类的数据类型 他转化为了 值类型 还是有差别的 要看这么用了 这里面涉及到一个数据的 同步问题 我也是个初学者希望能帮到你 建一个TreeSet<Short>数组的问题 java 解析excel的问题 如何能让代码变成软件? 谁有中文版的JAVA API帮助文档? SmartInvoke——Java客户端程序开发的另一种选择 关于proxool的配置 如何从ACSII转为字符??? dom转化成字符串的问题。 如何成为一名java程序员? 请问C++与JAVA如何通讯? ant的一个问题 java 与 C 数据结构的主要区别
// 在定义时就被初始化了的String域,不要这样写
String s="a";}
class S2{
String s;
//通过构造器初始化的String域
public S2(String s){
this.s=s;
}
}
public class Test{
public static void main(String[] args){
S1 s1=new S1();
S2 s2=new S2("bbb");
System.out.println(s1.s);
System.out.println(s2.s);
}
}
后者可以通过main改变s的值,而前者s的值是写死了的
其实最大的不同就是类的生命周期中初始化的顺序不同。初始化的时间不同。
public class Test {
static {
}
{
}
private static String s1 = "a";
private static String s2 = "b";
public Test() {
}
public static void print() {
}
public void display() {
}
}
String name="tom";
}public class Test {
String a;
Student s;public static void main(String[] args) { test t=new test();
String a=new String("a");
t.aa(a);
System.out.println(t.a);
a=new String("b");
System.out.println(t.a)
a="a";
t.aa(a);
System.out.println(t.a);
a="b";
System.out.println(t.a");
Student s=new Student();
t.ss(s);
System.out.println(t.s.name);
s.name="t";
System.out.println(t.s.name);
}
}结果 前4 个 都是 输出 字符串 a后面 2个 tom
和t
通常情况先 通过方法传参数 穿的是引用 你所定义的变量 随着 引用 的改变 而改变 这点可以从 最后 2个输出结果看出来
前4个 结果说明像 String 这类的数据类型 他转化为了 值类型
还是有差别的 要看这么用了 这里面涉及到一个数据的 同步问题
我也是个初学者希望能帮到你