A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?

2.什么情况下会用到Static关键字?

3.静态代码块会在什么时候执行?

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?

62 个回复

倒序浏览
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
(1)String类是引用类型数据。
(2)字符串底层是char数组,而数组在创建之初长度就是固定的,因此字符串的长度是不可变得。
2.什么情况下会用到Static关键字?
(1)用来修饰成员变量:使所有本类的对象都共享同一份静态变量的数据。
(2)用来修饰成员方法:使方法可以通过类名直接调用而不需要创建对象。
(3)静态代码块:当需要初始化某个类,给静态变量赋值的时候。
3.静态代码块会在什么时候执行?
答:静态代码块会在第一次用到静态代码块所在类的时候,执行唯一的一次。
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
(1)String s = new String("abc");这句代码创建了3个对象,
      a.在栈内存中建立了一个String s,
      b.在堆内存中新建了一个new String,
      c.在堆内存的常量池生成一个abc;
(2)String s = "abc";这句代码创建了2个对象,
     a.在栈内存中建立了一个String s,
     b.在堆内存的常量池生成一个abc。


回复 使用道具 举报
本帖最后由 陈伟彬 于 2019-3-8 21:25 编辑

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:
        引用数据类型;
       原因:字符串底层是char数组,而数组在创建之初长度就是固定的,因此字符串的长度是不可变;
2.什么情况下会用到Static关键字?

        当某一类下的每个对象都有一个相同变量时,则可以使用Static将其从属于对象变成属于类使其成为同一类下所有对象的共享;
3.静态代码块会在什么时候执行?
答:
        在首次使用含代码块的类时,代码块会执行唯一一次
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:
       如果两个不是在同一个类中:
                String s = new String("abc"):创建两个对象;                        
                      “abc”放在方法区常量池中;new String 放在堆中;
                String s = "abc":创建一个对象;
                        "abc"放在方法区常量池中;
        如果两个在同一个类中:
                String s = new String("abc")  先写的话:
                        String s = new String("abc"):创建两个对象;
                        String s = "abc":没有创建对象;
                String s = "abc"  先写的话:
                        String s = new String("abc"):创建一个对象;
                        String s = "abc":创建一个对象;




回复 使用道具 举报 1 0
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型。
字符串池在方法区(Method Area)中是一种特殊的存储区域。
当创建一个字符串时,如果字符串已经存在于池中,现有字符串的引用将被退回,而不是创建一个新的对象并返回其引用。
如果字符串可变,那么在这些模块中,将会引发严重的安全性问题。
不可变的对象不能被改变,他们可以在多个线程中共享,就不需要使用线程的同步操作。

2.什么情况下会用到Static关键字?
static 关键字,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属
于某个对象的,这种情况下就可以用到static。

3.静态代码块会在什么时候执行?
随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");
在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool 中,一个在堆中。

String s = "abc"
会保存在方法区的字符串常量池中,首先检查字符串常量池中是否存在"abc"对象,
如果存在,直接返回指向"abc"对象的指针,不存在就会在字符串常量池中创建一个"abc",然后返回指针。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String是引用数据类型;对一个String变量重新赋值或者添加字符,相当于生成了一个新的字符串,原本的字符串还在常量池,不会发生变化(此时这个字符串是一个常量),因此字符串的长度是不变的。
2.什么情况下会用到Static关键字?
当一个类的对象存在同一种变量时,就可以用static关键字去修饰,当这个类一运行就会生成这个变量,应用于所有对象。

3.静态代码块会在什么时候执行?
静态代码块会在第一次用到该类时执行,并且只会执行这一次,后面重新用到这个类也不会重复执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");这句代码创建了3个对象,在栈内存中建立了一个String s,在堆内存中新建了一个new String,在堆内存的常量池生成一个abc;
String s = "abc";这句代码创建了2个对象,在栈内存中建立了一个String s,在堆内存的常量池生成一个abc。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型。
字符串池在方法区(Method Area)中是一种特殊的存储区域。
当创建一个字符串时,如果字符串已经存在于池中,现有字符串的引用将被退回,而不是创建一个新的对象并返回其引用。
下面的代码将在堆中只会创建一个字符串对象。
如果字符串可变,那么在这些模块中,将会引发严重的安全性问题。
不可变的对象不能被改变,他们可以在多个线程中共享,就不需要使用线程的同步操作。

2.什么情况下会用到Static关键字?
static 关键字,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属
于某个对象的,这种情况下就可以用到static

3.静态代码块会在什么时候执行?
随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");
在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool 中,一个在堆中。

String s = "abc"
会保存在方法区的字符串常量池中,首先检查字符串常量池中是否存在"abc"对象,
如果存在,直接返回指向"abc"对象的指针,不存在就会在字符串常量池中创建一个"abc",然后返回指针。
回复 使用道具 举报
本帖最后由 黑马6期陈华 于 2019-3-8 21:01 编辑

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
(1)String类是引用数据类型。
(2)因为String类的对象是字符串常量,常量一旦被创建,其内容在程序运行期间就永不可变。
2.什么情况下会用到Static关键字?
(1)用来修饰成员变量:使所有本类的对象都共享同一份静态变量的数据。
(2)用来修饰成员方法:使方法可以通过类名直接调用而不需要创建对象。
(3)静态代码块:当需要初始化某个类,给静态变量赋值的时候。
3.静态代码块会在什么时候执行?
当第一次用到本类时,会【唯一一次地】执行静态代码块。
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?

(1)String s = new String("abc");这句代码创建了3个对象,String s在栈内存中被创建,在堆内存中创建了new String对象,在堆中的字符串常量池中创建了“abc”。
(2)String s = "abc";这句代码创建了2个对象,String s在栈内存中被创建,在堆中的字符串常量池中创建了“abc”。

点评

字符串长度不可变是因为它的底层是一个char数组  发表于 2019-3-10 10:14
回复 使用道具 举报

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String是引用数据类型;对一个String变量重新赋值或者添加字符,相当于生成了一个新的字符串,原本的字符串还在常量池,不会发生变化(此时这个字符串是一个常量),因此字符串的长度是不变的。

2.什么情况下会用到Static关键字?
当一个类的对象存在同一种变量时,就可以用static关键字去修饰,当这个类一运行就会生成这个变量,应用于所有对象。

3.静态代码块会在什么时候执行?
静态代码块会在第一次用到该类时执行,并且只会执行这一次,后面重新用到这个类也不会重复执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");创建了3个对象,在栈内存中建立了一个String s,在堆内存中新建了一个new String,在堆内存的常量池生成一个abc;
String s = "abc";创建了2个对象,在栈内存中建立了一个String s,在堆内存的常量池生成一个abc。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String是引用数据类型;对一个String变量重新赋值或者添加字符,相当于生成了一个新的字符串,原本的字符串还在常量池,不会发生变化(此时这个字符串是一个常量),因此字符串的长度是不变的。
2.什么情况下会用到Static关键字?
当一个类的对象存在同一种变量时,就可以用static关键字去修饰,当这个类一运行就会生成这个变量,应用于所有对象。

3.静态代码块会在什么时候执行?
静态代码块会在第一次用到该类时执行,并且只会执行这一次,后面重新用到这个类也不会重复执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");这句代码创建了3个对象,在栈内存中建立了一个String s,在堆内存中新建了一个new String,在堆内存的常量池生成一个abc;
String s = "abc";这句代码创建了2个对象,在栈内存中建立了一个String s,在堆内存的常量池生成一个abc。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型
字符串是常量,运行期间不会改变
2.什么情况下会用到Static关键字?
当某一类下的每个对象都有一个相同变量时,则可以使用Static将其从属于对象变成属于类使其成为同一类下所有对象的共享;
3.静态代码块会在什么时候执行?
当某一类下的每个对象都有一个相同变量时,则可以使用Static将其从属于对象变成属于类使其成为同一类下所有对象的共享;
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");这句代码创建了3个对象,在栈内存中建立了一个String s,在堆内存中新建了一个new String(),在堆内存的常量池生成一个abc;
String s = "abc"创建了两个,在栈内存中建立了一个String s,在堆内存的常量池生成一个abc;
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
是引用类型。
因为String类的底层是一个char类型数组,数组在创建后,长度不可变

2.什么情况下会用到Static关键字?
创建静态变量和静态方法的时候

3.静态代码块会在什么时候执行?
会再第一次使用类的时候,并且只会执行一次

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
  String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?

.String s = new String("abc");创建的两个对象再一个在堆中,一个在字符串常量池中
String s = "abc";创建了一个对象,实在字符串常量区中。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型;因为字符串是常量,常量在程序运行期间不可改变

2.什么情况下会用到Static关键字?
当每一个对象都共享一个属性时,这个属性可以用Static关键字修饰。被Static修饰的属性就不仅仅属于对象,而属于类

3.静态代码块会在什么时候执行?
在第一次使用到本类时,会执行一次,而且只执行一次,执行优先度比其他的构造方法高

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc"):
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆里创建了内容为“abc”的对象,不在常量池中
String s = "abc":
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆中的字符串常量池里创建一个字符串对象内容为“abc”
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变? 引用数据类型   字符串是常量 常量在运行期间不可改变

2.什么情况下会用到Static关键字?当每一个对象都共享一个属性时,这个属性可以用Static关键字修饰。

3.静态代码块会在什么时候执行? 第一次使用类的时候

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建? 两个对象 字符串常量池跟堆中
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型。
字符串池在方法区(Method Area)中是一种特殊的存储区域。
当创建一个字符串时,如果字符串已经存在于池中,现有字符串的引用将被退回,
而不是创建一个新的对象并返回其引用。
下面的代码将在堆中只会创建一个字符串对象。
如果字符串可变,那么在这些模块中,将会引发严重的安全性问题。
不可变的对象不能被改变,他们可以在多个线程中共享,就不需要使用线程的同步操作。

2.什么情况下会用到Static关键字?
static 关键字,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属
于某个对象的,这种情况下就可以用到static

3.静态代码块会在什么时候执行?
随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");
在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,
所以创建了两个String对象,一个在pool 中,一个在堆中。

String s = "abc"
会保存在方法区的字符串常量池中,首先检查字符串常量池中是否存在"abc"对象,
如果存在,直接返回指向"abc"对象的指针,不存在就会在字符串常量池中创建一个"abc",然后返回指针。
回复 使用道具 举报
LPY 中级黑马 2019-3-8 21:28:53
14#

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型;因为字符串是常量,常量在程序运行期间不可改变

2.什么情况下会用到Static关键字?
当每一个对象都共享一个属性时,这个属性可以用Static关键字修饰。被Static修饰的属性就不仅仅属于对象,而属于类

3.静态代码块会在什么时候执行?
在第一次使用到本类时,会执行一次,而且只执行一次,执行优先度比其他的构造方法高

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc"):
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆里创建了内容为“abc”的对象,不在常量池中
String s = "abc":
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆中的字符串常量池里创建一个字符串对象内容为“abc”
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
        引用数据类型;
        因为字符串的值在创建后不能被更改
2.什么情况下会用到Static关键字?
        static可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的;
        当该类的每个对象需要共享同一个成员属性的值时,可以用static修饰
3.静态代码块会在什么时候执行?
        在该类及其子类第一次加载时执行且执行一次
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
        String s = new String("abc");创建一个对象
        栈中为s开辟空间,大小为一个句柄大小或者说地址大小,指向堆中对象
        堆中而不在常量池中,开一个句柄大小的空间,指向堆中一个字节数组
        堆中开辟一个字节数组空间
       
        String s = "abc";创建一个对象
        栈中为s开辟空间,大小为一个句柄大小或者说地址大小,指向堆中的常量池中对象
        堆中的常量池中,开一个句柄大小的空间,指向堆中一个字节数组
        堆中开辟一个字节数组空间
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型;因为字符串是常量,常量在程序运行期间不可改变

2.什么情况下会用到Static关键字?
当每一个对象都共享一个属性时,这个属性可以用Static关键字修饰。被Static修饰的属性就不仅仅属于对象,而属于类

3.静态代码块会在什么时候执行?
在第一次使用到本类时,会执行一次,而且只执行一次,执行优先度比其他的构造方法高

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc"):
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆里创建了内容为“abc”的对象,不在常量池中
String s = "abc":
创建2个对象;
在栈中创建了一个变量名为s的字符串对象;
在堆中的字符串常量池里创建一个字符串对象内容为“abc”
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:String类是引用数据类型。
因为字符串是常量,内容永不可不变。

2.什么情况下会用到Static关键字?
答:
(1)用来修饰成员变量:使所有本类的对象都共享同一份静态变量的数据。
(2)用来修饰成员方法:使方法可以通过类名直接调用而不需要创建对象。
(3)静态代码块:当需要初始化某个类,给静态变量赋值的时候。

3.静态代码块会在什么时候执行?
答:当第一次用到本类时,静态代码块执行唯一的一次。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:
(1)创建了三个对象,分别存在于:String s 在栈内存中创建,new String在堆内存中被创建,
堆中的字符串常量池中创建了"abc"
(2)创建了两个对象,String s 在栈内存中创建,堆中的字符串常量池中创建了"abc"
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
  String类是引用数据类型。字符串的内容创建后是不可变,所以长度也不可变。

2.什么情况下会用到Static关键字?

    static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于

类的,而不是单单是属于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用

了。
3.静态代码块会在什么时候执行?
  当第一次用到本类时,静态代码块执行唯一的一次


4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创

建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
   String s = new String("abc");创建了3个对象,在栈内存中建立了一个String s,在

堆内存中新建了一个new String,在堆内存的常量池生成一个abc;
String s = "abc";创建了2个对象,在栈内存中建立了一个String s,在堆内存的常量池生

成一个abc。
回复 使用道具 举报
王佳盛

1.        String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:String类是引用数据类型;字符串是一个常量,常量在程序运行中不可被改变,所以字符串长度不可改变。

2.      什么情况下会用到Static关键字?
答:当一个属性属于类而不属于对象时,就可以用到Static关键字。例如一个学生类中的班级属性,它应该是属于类的,而不属于对象。这样班级的属性就可以用Static关键字修饰;
3.        静态代码块会在什么时候执行?
答:当第一次用到类时,静态代码块会执行唯一一次;并且会先于构造方法执行

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:
(1) String s = new String("abc");创建了两个对象,一个是对象时s,存在于堆内存中;还有一个对象是“abc”存在于方法区中的字符串常量池中。
(2) String s = "abc";只创建了一个对象,存在于字符串常量池中


回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马