Java语法面试题

1、String是最基本的数据类型吗?【string和stringbuffer单独用来一天的时间在讲,常用API部分】

不是,
基本数据类型包括:byte,short,int,long,float,double,boolean,char.
而String是类代表字符串,属于引用类型,所谓引用类型包括:类,接口,数组...

2、string和stringBuilder、StringBuffer的区别?

(1)第一点就是执行速度

string是字符串常量,对string对象进行的操作实际上就是一个不断创建新的对象并将旧的对象回收的一个过程

stringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对对象进行更改,而不进行创建和回收的操作,所以要比string快。
{正是因为StringBuffer是线程安全的所以它才比stringBuilder跑的慢,因为需要判断锁对象,获取锁对象,释放锁对象操作}

(2)第二点就是是否线程安全

String中的对象是不可变的,也就可以理解为常量,显然线程安全。
StringBuilder是线程不安全的,而StringBuffer是线程安全的。
因为StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

(3)总结一下

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况




面试补充:
string和stringbuffer有什么区别?操作几个string变量连接具体是怎么操作的?
问题一:
string是字符串常量,对string对象进行操作实际上就是一个不断创建新对象并将就对象回收的一个过程。
stringbuffer是字符串变量,长度是可变的,对变量进行操作就是直接对对象进行更改,不进行创建和回收,所以要比string快
问题二:
字符串拼接问题
情况一:字符串常量的拼接

    String str3="hello"+" word!";
    String str4="hello word!";
    System.out.println(str3==str4);
    //运行结果:true

原因:JVM编译器对字符串做了优化,在编译时str3就已经被优化成“hello Word!”,str3和str4指向字符串常量池同一个字符串常量,所以==比较为true。
情况二:字符串+字符串变量、字符串变量之间的拼接。

    String str1="hello";
    String str2=" word!";
    String str3="hello word!";
    String str4=str1+"word!";
    System.out.println(str3==str4);
    //运行结果为false

原因:字符串拼接时如果有字符串变量参与拼接,底层调用了StringBuffer可变字符串处理。代码如下

    StringBuffer sb=new StringBuffer("");
    sb.append(str1);
    sb.append("word!");
    str4= sb.toString();
    //StringBuffer的toString()方法底层new了一个String对象,所以str4在堆内存中重新开辟了空间,
    //str3指向常量池,所以为false




String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
private final char value[];

StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
char[] value;

(1)首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:
  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

(3) 是否线程安全

String中的对象是不可变的,也就可以理解为常量,显然线程安全。

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

2、float f = 3.4是否正确

笔试时经常会出现的一个问题,float型float f=3.4是否正确
答案:不正确。
原因:精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或float f = 3.4f
在java里面,没小数点的默认是int,有小数点的默认是 double;
编译器可以自动向上转型,如int 转成 long 系统自动转换没有问题,因为后者精度更高
double 转成 float 就不能自动转了,所以后面的加上个 f;


3、java语言中有没有goto关键字?

goto是java语言中的保留字,目前还没有在java中使用。C语言中使用。

4、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

各种数据类型按照数据范围从小到大依次列出:
byte -> short -> int -> long -> float -> double

自动类型转换
表示范围小的数据类型转换成范围大的数据类型,这种方式称为自动类型转换
自动类型转换格式:
范围大的数据类型 变量 = 范围小的数据类型值;

强制类型转换
表示范围大的数据类型转换成范围小的数据类型,这种方式称为强制类型转换
强制类型转换格式:
范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值;

5、int和Integer的区别

1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0

6、Java中三种长度表现形式

数组.length 属性 返回值 int
字符串.length() 方法,返回值int
集合.size()方法, 返回值int

7、&和&&区别

& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。
&&”是逻辑运算中的“短路”,若"&&"前的条件为false时判断结果为false,不再执行"&&"后的语句块。"&&"前为true则继续进行进行后半部分的判断 。

8、switch能作用的类型

在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。

在Java7中,也支持了String类型。不支持Long类型,long类型转成int类型,可能得不到精确值,但是byte、short、char都可以转成int,并且得到的数没有损失。

9、Math.round(x)

返回值
与 x 最接近的整数。
说明
对于 0.5,该方法将进行上舍入。
例如,3.5 将舍入为 4,而 -3.5 将舍入为 -3。

10、程序注释

单行注释 //注释内容
多行注释 /注释内容/
文档注释 /*注释内容/

11、标识符

不能使用关键字。不能以数字开头

12、数据类型

数据类型.png

常量

整数类型
十进制表示方式:正常数字 如 13、25等
二进制表示方式:以0b(0B)开头 如0b1011 、0B1001
十六进制表示方式:以0x(0X)开头 数字以0-9及A-F组成 如0x23A2、0xa、0x10
八进制表示方式:以0开头 如01、07、0721

小数类型
如1.0、-3.15、3.168

布尔类型
true、false

字符类型
如'a','A', '0', '家'
字符必须使用’’ 包裹,并且其中只能且仅能包含一个字符。

字符串类型
字符串String类型是一种引用类型,我们先了解作为常量类型的使用方式
如“我爱Java”,“0123”,“”,“null”
字符串必须使用“”包裹,其中可以包含0~N个字符。

13、break、continue、return的区别

break:【break用于完全结束一个循环,跳出循环体。如果break语句包含在嵌套循环里,它只跳出最里面的循环。】此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。

continue:continue的功能和break有点类似,区别是continue只是中止本次循环,接着开始下一次循环。而break则是完全中止循环。

return:return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。

14、Java中是否可以继承String类,为什么

不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。

15、方法重载和重写的区别

方法重写(overriding):

1、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。
2、子类方法抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常)
3、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

方法重载(overloading):

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同(个数或者类型),方法体也不相同,最常见的重载的例子就是类的构造函数,

重载Overloading是一个类中多态性的一种表现。

重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容