在java语言中利用length_[常用知识]Java知识小记——技巧与陷阱

我为什么要写一篇有关Java语言技巧和陷阱的知识的认知的文章呢。其实这主要是为了归纳,使你我他都在使用Java语言的同行,共同交流,共同提高,使我们都有一定的驾驭能力。下面我总结一个小题目,来进一步分析一下。

一、处理返回结果的时候

下面看一段代码:

7f8db27ef34dd53f0b8b2de7065a73b1.png

再看下面这段代码:

dee23877b31e566901243873a7bf6187.png

通过分析这两段代码,大家可能都认为没什么区别,都是实现一样的功能。但是严格的代码规范,要求我们在写代码的时候只能返回一个结果。第一段代码是通过两处返回结果;第二段代码就比较严谨了,通过一个变量,就表达了一进一出,不会产生歧义。

二、简化代码,也要考虑效率

根据上面的代码,有些程序员想过,能不能还能更简化呢?这样也不用看那复杂的代码,这也是我需要讲的。看下面这段代码:

6c85eb0ceae726b0c06da075c919a2a1.png

这段代码是不是简洁多了。如果你想实现单语句的处理,就可以这样写了;如果是多语句,就不能这样写,还是需要老老实实的这样写:

014a86ba71715fa984045c7e235d831e.png

三、了解掌握java基本数据类型

我曾经在面试那些应聘java程序员的时候,有的拥有三、四年工作经验的程序员,甚至还不如一个刚毕业的学生。基础知识不牢固,简单的问题都答不上来。我在这里重述一遍,java的基本数据类型有八种,分别是int 、double、boolean、long、char、float、byte、short类型,而String不是java的基本类型的,这一点是和其他语言在数据类型上是不同的。String是一个类,不是java语言的基本数据类型,但可以定义一个String对象,可以对字符串进行不同的操作。

四、尽量少用new去实例一个变量或一个对象

我们在使用String、boolean、Integer的时候,尽量少用new去实例一个对象;并且在使用定义类对象的时候,尽量少用new去实例。因为每当你实例一个对象或变量的时候,都会在内存中申请一块动态或静态区域,对于经常调用的Method或Param,可以定义Static,这样程序执行效率还是比较高的。

五、代码规范性,有效避免代码歧义

一般在编写代码的时候,在if语句中单语句,可以不用{}大括号,像如下代码:

16e087b5f38364cbea8b821bf6ccbcd4.png

编程经验比较丰富的程序员,是知道在多语句的时候,要加{}大括号的。不过不管单语句,还是多语句,加上{}大括号,语句比较清晰,不存在歧义,容易理解。代码如下:

50e8490f42d3dfc001f46ad423c945fc.png

六、避免多次定义,合理优化程序执行效率

通常我们在编写一个类的时候,这个类里面有很多方法,同时都会用到一些变量和对象。如果都在一个类里面,可以在类里面方法外定义,同时合理利用new对象。

06a9ca69029cb901b90ed623450e1cb8.png

在第一句Code中,会在内存中申请一个区域,存放字符串“ptrGain<>0”,在执行多次后,JVM中会检测内存中是否存在,如果存在,就不会再申请内存区域。在第二种Code中,在执行多次后,有多少次,就new多少次。

七、数据类型的转换,都会出现理解误区

我们看看如下程序,如果你是笔者,你如何做。

下列代码片段会输出什么内容?

char num='7';

System.out.println((int)num);

你是不是立即会想到输出是7呢?其实答案是55,应为是char类型,因为前面(int)做了隐式转化成ASSIC码。

八、单目运算,要注意运算规则

已知X、Y、Z的取值依次为5、6、7,写出执行下面的运算后X、Y、Z的取值:

X += --Y * Z++

X = ? Y = ?Z = ?

这样的运算题目,也是会让初学者眩晕的。我给出大家答案,X=40,Y=5,Z=8;为什么是这样,你就好好理解吧。

九、不是任何情况下都相等

请看如下试题:

下列代码会输出什么内容?

int[] a = { 1, 2, 3 };

int[] b = { 1, 2, 3 };

System.out.println(a == b);

有人说输出是true.我要说不要被表面的假象所迷惑,其实正确答案是false.为啥呢?a数组和b数组都是取的是内存地址,所以不可能为true.

十、java语言中length()的作用知多少

以前我的老师给我出过这样一道题:问使用方法length( )可以获得字符串或数组的长度吗?我当时想的没想,就说可以。后来老师在课堂上帮我纠正了错误,答案是不可以的。java语言中length()取的是char类型的,在获取长度的时候,应该这样写:

String test1="java";

String test2="java语言";

system.out.println(test1.getBytes().length)

system.out.println(test2.getBytes().length)

test1显示的是4

test2显示的是8

十一、容易忽视的语法错误

看如下试题:

下列代码是否能够正确编译运行?

int[] a;

for (int i = 0; i 

a[i] = i * i;

这样的题也是容易造成忽悠大家的。说白了,因为a数组就没初始化,想当然就或出现错误。

十二、有时简单的运算也会让你摸不着头脑的

看如下程序段:

public class Mystery {

public static void main(String[] args) {

int i = StdIn.readInt();

int j = StdIn.readInt();

int k = i + j;

System.out.println(j);

System.out.println(k);

}

}

假设文件input.txt的内容是两个整数1和1,执行下列的命令:

java Mystery 

我相信对于初、中级程序员十有八九都会做错。在这里我告诉大家,答案为5和8,您算对了吗?

步骤分解:

1.留意看上边StdIn做了两次输入操作,实际上j内存区域做了一次计算,所以后面做了位运算;

2.经过每次位运算,期间j的实际演变过程计算是2 3 4 5;

3.经过每次位运算,k的演变过程分别是2 4 6 8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值