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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

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

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

35 个回复

倒序浏览
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
  String类是引用数据类型,字符串封装的源码底层是采用byte数组去存储每个字符,根据字符串的长度创建对应的byte数组去存储,所以它的长度是不可变。

2.什么情况下会用到Static关键字?
  当多个对象的成员属性统一时,可以用Static修饰去共享同一个成员属性,避免创建对象时要多次的进行属性设置。在main方法的类中,由于main方法是用Static修饰, main方法中调用的方法也都必须是用Static修饰才可以访问或调用。
  
3.静态代码块会在什么时候执行?
静态代码会随着静态代码块所属的类加载而执行,优先于对象的创建,但只执行唯一一次。

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

2.什么情况下会用到Static关键字?
答:当想要在加载类的时候一次性给某些变量赋值,且只在类加载的时候赋值一次,那么可以用static修饰这些变量;
另外,当需要在外部用类型访问某个成员方法,而不依赖对象去访问时,可以用static去修饰该方法。

3.静态代码块会在什么时候执行?
答:静态代码块会在加载类的时候被执行,且只会被执行一次。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:String s = new String("abc")这句代码创建了2个字符串对象,“abc”这里是在字符串常量池中创建了对象,new关键字这里则在堆中(字符串常量池之外)创建了对象;
String s = "abc"这句代码只创建了一个对象,是在字符串常量池中创建。
回复 使用道具 举报
1.String 是引用类型,基本类型只有4类八种 其他都是引用类型,因为在字符串的底层是用数组,应为数组的长度不可变,所以字符串的长度也不可变;
2.当需要进行一次性赋值时,可以使用static进行修饰,还有当一个属性为整个类所共有的,也可以使用static修饰;
3.静态模块在类创建前执行。前提是你有创建类。
4.2个对象,new String 一个,“abc”一个。new关键字创建的对象在堆中,而“abc”则是在堆中的常量池中。
String s = new String("abc")创建了一个对象“abc”,是在堆中的常量池中创建的

回复 使用道具 举报
本帖最后由 吴少华 于 2018-12-8 20:44 编辑

1.是引用类型,因为字符串是String类型底部是二进制数据整合成数组编写,数组不可变,因此字符串不可变
2.当主方法创建的对象中的元素都共有同一个变量属性,即可在类中用Static该变量节省运存,Static关键字的静态方法在创建对象只运行第一次,用Static关键字的元素和方法加载的比普通的更快。静态方法不能调用成员变量和方法。
3.静态代码块会在所在类中第一次被引用时执行,且只执行一次。
4.String s = new String("abc");这句代码创建了2个对象,"abc"是方法区的字符常量池创建,new在堆中创建。
  String s = "abc";创建了1个对象,在内存中的方法区的字符常量池中创建?
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用类型数据;因为String底层是用数组来存储字符串的,数组的长度是固定的,任何字符串的操作都是新建了一个数组来记录,原来的字符串不变;
2.什么情况下会用到Static关键字?
需要定义一个变量或者方法不需要创建对象,就可以直接调用;
3.静态代码块会在什么时候执行?
在第一次加载类的时候执行第一次也是最后一次;
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
创建了2个对象,new String 创建了一个对象在堆内存中,“abc"创建了一个常量字符串对象存在字符串常量池中;
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?

“abc"创建了一个对象;在字符串常量池中创建;
回复 使用道具 举报
本帖最后由 许晓明 于 2018-12-8 21:00 编辑

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:String是引用数据类型,因为字符串是常量,在最底层的代码中,字符串本质上的一个字节数组,而数组的长度不可改变;

2.什么情况下会用到Static关键字?
答:对于成员变量,如果一个成员变量是所有对象都可以访问修改的变量,即是属于类的变量,便可以使用static
对于成员方法,当主类程序运行无需使用到类A对象且需求使用类A的成员方法时,可使用static修饰成员方法,即可在主类中使用类A.成员方法名调用该方法


3.静态代码块会在什么时候执行?
静态代码块会在类被调用的时候最先开始执行,且只会执行一次;

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:String s=new String("abc")这句代码创造了2个对象,String对象在字符串常量池中和“abc”数组在堆中;
String s=“abc”这句创造了1个对象,“abc”在堆中的字符串常量池
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:String是引用数据类型。 字符串长度不可变,是因为字符串的底层储存数据是字节数组byte[]。因为数组的长度不可变,所以字符串的长度不可变。
2.什么情况下会用到Static关键字?
答:static关键字—意思是“静态”。
      1.static是在类中需要把某个变量共享,不用多次的创建对象赋值。
      2.static修饰的成员变量和成员方法是属于类的,并不属于某个对象。所以在使用时,类名.成员变量 类名.成员方法()的方式进行访问。

     3.需要在对变量进行初始化赋值时。


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


4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:String s = new String("abc")这行代码,创建了两个对象,“abc”这个String类的对象在堆(heap)常量池中;new String("abc")在堆中常量池外。 String s = "abc"这行代码创建了一个对象,在常量池中。





回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型;因为字符串的底层是byte类型的数组(常量),所以不能发生改变。

2.什么情况下会用到Static关键字?
被Static修饰的成员变量可以不用创建对象的情况下进行修改;
当外部用类访问某个成员方法的时候可以不用对象去访问,可以用static修饰该方法。


3.静态代码块会在什么时候执行?
会在加载类的时候执行,并且只能执行一次。


4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");创建了两个对象,new在内存中的堆内存里,abc在堆中的常量池里;
String s = "abc";创建了一个对象,在常量池中创建。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型;
正是因为字符串不可改变,所以字符串是可以共享使用的。
字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。

2.什么情况下会用到Static关键字?
static关键字可以用来修饰成员变量和成员方法,当static修饰成员变量时,该变量成为类变量,该类的每个对象都享有同一个类对象的值,任何对象都可以更改该变量的值但也可以在不创建该类的对象的情况下对类变量进行操作。

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

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

   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
“abc"创建了一个对象;在字符串常量池中创建;

回复 使用道具 举报

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
        引用数据类型;因为字符串的底层为数组,数组长度不能改变。
2.什么情况下会用到Static关键字?
         在不创建对象的情况下 去调用方法
3.静态代码块会在什么时候执行?
         在加载类的时候会执行,且只执行一次
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
          2个,string在方法区中的字符串常量池中,abc在堆中
          1个,在堆中

点评

凡是用双引号引起来的字符串都是存在于常量池中,new出来的存在于堆中  发表于 2018-12-9 09:20
回复 使用道具 举报

1.是引用数据类型。因为规定String类数据永不改变。
2.(1)Static修饰方法,当想要直接用类名访问方法时。
(2)修饰变量,同一类中用static修饰的变量值在不同的对象中都相等。
(3)static代码块,当只想访问一次时可以使用。
3.只想使用一次时
4.String s = new String("abc");2("abc")直接创建一个在方法区的常量池,
然后new又在堆中创建一个。
String s = "abc";一个,在方法区中的常量池。
回复 使用道具 举报
1.String类是引用数据类型,字符串的值在创建之后不可改变。
2.被static关键字修饰的成员变量和成员方法属于类,不属于某个对象,可以不通过创建对象来调用成员变量和方法。可以节省计算机的内存空间。
3.随着类的加载而执行,且只执行一次,优先于main方法和构造方法执行。
4.创建了两个对象,“abc”在堆内存的字符串常量池创建的,new 关键字是在堆内存中创建一个新的存储空白间。
1个对象,在堆内存·的字符串常量池。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型,字符串一旦创建,就相当与常量,在程序中是不可改变的,自然长度不可变,还有它的底层原理是byte[]数组,数组的长度也是不可变的,自然字符串长度也是不可变。
2.什么情况下会用到Static关键字?
通过Stiatic修饰的变量名或者方法名在类中是可以共享的。这个就是当这个类中的元素都有同意属性的时候将这个属性用static修饰,就可以一次性解决,不需要每个对象或者元素都去赋值这个属性,这样也节省内存。
3.静态代码块会在什么时候执行?
静态代码块会在它所在的类首次运行的时候执行一次,然后就再也不执行了。
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");这句代码创建了两个对象,new的对象是在堆中,双引号直接创建的字符串是在堆中的字符串常量池当中;
String s = “abc”创建了一个对象,存在堆当中的字符串常量池当中。
回复 使用道具 举报
本帖最后由 陈益源 于 2018-12-9 11:06 编辑

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型,因为字符串最底层原理就是byte数组,因此长度不可变

2.什么情况下会用到Static关键字?
当某一成员变量的内容所有对象都一致的时候,可以用Static进行修饰,不需要一一进行数据录入修改,直接使用类名.静态变量名;

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

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");这句代码创建了2个对象,"abc"创建在堆中的字符串常量池中,new在堆中创建;
String s = "abc";创建了1个对象,创建在堆中的字符串常量池中
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
Strig是引用数据类型,因为字符串的底层原理是byte【】数组,一旦创建就不可改变。

2.什么情况下会用到Static关键字?
当要修改成员变量或者成员方法的时候,一个个修改太麻烦,就用static修饰,一次就可以解决。

3.静态代码块会在什么时候执行?
在第一次调用该类的第一次就执行,而且只执行一次。

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
创建的两个字符串对象,一个在堆里,一个在常量池里。
String s = "abc"这句代码只创建了一个对象,是在字符串常量池中创建。
回复 使用道具 举报

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型, 字符串不是长度不可变,而是 字符串的内容不可变,
因为 字符串的内容不可以改变,所以 字符串是可以共享使用。
2.什么情况下会用到Static关键字?
它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类,而不是单单属于某个对象

3.静态代码块会在什么时候执行?
随着类的加载的时候执行一次,而且就只会执行唯一的一次,是比main方法和构造方法更加优先。
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?

   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:1.String类是引用数据类型
       2.通过直接赋值的方式,字符串首先会在栈内存里面开辟一块空间,然后把它的值放到内存中的方法区里面的字            符串常量池里面,然后生成一个地址这个地址给到栈内存的,String s = xxx 跟堆没有任何关系,而在下一次           有直接创建赋值一个字符串的时候首先也会在栈当中开辟一块空间 如String ss =   然后去方法区里面的常量池           里面查找是否有相同的字符串,如果有则直接引用 之前的那个地址而不会为这个对象在常量池中创建新的字符          串 所以应该是在栈中创建了两个对象 指向同一个内容, 如果为 s+=xxx 则会直接去找常量池找到后再次建立一      块儿空间并且生成地址值,但是并没有意义因为在栈中没有任何变量指向它,所以他会在常量池中在创建一个空间把之前的和现在合起来拼凑出一个新的字符串并且把原来s的指针断掉 重新指向 拼凑的字符串,(因为字符串的创建都在常量池中是个常量所以一经创建则不能被改变,若值相同则直接引用,若不相同则再次创建一个新的。若之前的变量+=新的字符串,则会把之前的复制一份加上现在的字符串创建一个新的字符串然后断掉之前的指针);

2.什么情况下会用到Static关键字?
答:1.在多个对象需要用到同一个变量数据的时候他就该被定义为静态的,static关键字是静态的表示,我们的main方法就是静态的,静态的生命周期是随着类的创建而创建随着类的消失而消失,所以jvm不需要创建对象就可以直接通过类名调用,在类加载的时候我们的变量就已经存在在内存当中的静态区了,
3.静态代码块会在什么时候执行?
答:在类加载的时候就会执行,静态内容是随着类的加载而加载的,在加载类的时候就会启动静态代码块里面的代码,我们的代码如果要提前加载的话就可以用静态代码块儿包裹起来,如游戏的初始化过程,可以在一启动的时候就开始加载。
4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答: 两个对象 new出来的都在堆内存中,直接赋值的在方法区里面的常量池里面,分别会分配不同的地址值,如果比较地址值的话则会是false 如果比较内容的话就是true。




回复 使用道具 举报
1.String类是引用数据类型,字符串是常量,它的底层原理是Byte[]数组,长度不可变。
2.当一个类中的所有对象共享一个成员变量的值时,使用Static关键字修饰该变量。
3。静态代码块随着类的加载执行,优先于main和方法,并且只执行一次。
4.String s = new String("abc");创建了两个对象,一个在堆内存的常量池中,又在堆内存new出来了一个对象;String s = "abc";创建了一个对象,在对内存的字符串常量池中。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型,因为字符串实际上是由单个字符组成的字符数组,而字符数组又是由底层的字节数组组成,因为数组的长度是不可改变的,所以字符串长度是不可改变的

2.什么情况下会用到Static关键字?
当多个成员变量有相同的属性的时候,可以用static去修饰这个属性,另外当在外部想要直接用类名访问时,而不用创建对象去访问,也可以用static修饰方法

3.静态代码块会在什么时候执行?
静态代码块会在类加载的时候第一次执行,也是唯一一次执行

4.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
第一个创建了两个对象,分别是new出来的对象在堆内存中,和用双引号引起来的字符串在堆内存中的字符串常量池中,第二个是双引号里的字符串,在内存中的字符串常量池中


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