转自:http://blog.csdn.net/andywxf01/article/details/53502615

我一直在用C开发,想转到Java时最容易想到的事就是把C里写的代码和功能用JAVA写出来,这样接受起来会容易多了。只要心理不排斥,后面的事不都是分分钟钟的事嘛,(没时间的重点看第二部分)。

一: C与JAVA相同的地方

我尝试着写了下面的C代码,都是简单的代码。

#include<stdio.h>
void score_level(char level)
{
switch(level)
{
case 'A':
printf("90-100\n");
break;
case 'D':
printf("<60\n");
break;
}
}
void sort(int arr[]) //数组排序
{
int i, j, tmp; for(i=; i<; i++)
for(j=; j<-i-; j++)
{
if(arr[j]>arr[j+])
{
tmp = arr[j];
arr[j] = arr[j+];
arr[j+] = tmp;
}
}
}
int max(int a, int b)//求最大值
{
return a>b?a:b;
}
int Fac(int n) //递归求阶乘
{
if(n== || n==)
return ;
else
return Fac(n-)*n;
}
void main()
{
int i, mx, sum, array[]={,,,,,,,,,};
mx = max(,);
sum = Fac();
printf("%d %d\n", mx, sum);
score_level('A');
sort(array);
for(i=; i<; i++)
printf("%d ", array[i]);
}

结果运行如下:

10 120
90-100
0 1 2 3 4 5 6 7 8 9

之所以写出上面的代码基本上是把C常用的知识都包含了:函数的调用,参数传值传地址都有,递归,数组等(结构体不用说,类就是从结构体上来的)。
之后我把它直接转到JAVA如下代码:

public class Example {
static void score_level(char level)
{
switch(level)
{
case 'A':
System.out.println("90-100");
break;
case 'D':
System.out.println("<60");
break;
}
}
static void sort(int arr[]) //数组排序
{
int i, j, tmp; for(i=0; i<10; i++)
for(j=0; j<10-i-1; j++)
{
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
static int max(int a, int b)//求最大值
{
return a>b?a:b;
}
static int Fac(int n) //递归求阶乘
{
if(n==1 || n==0)
return 1;
else
return Fac(n-1)*n;
} public static void main(String[] args) { int i, mx, sum;
int array[]={9,1,3,2,4,5,8,7,6,0};
mx = max(5,10);
sum = Fac(5);
System.out.println(mx+" "+sum);
score_level('A');
sort(array);
for(i=0; i<10; i++)
System.out.print(array[i]+" ");
}
}

运行结果跟C一模一样的。到这里哥心里嗨了,这样才对嘛,让我感觉JAVA强大之前,先让我能写出我之前的代码我才能接受啊。

二: 上面知识中JAVA更强大的地方

1) 方法的重截:

C语言中的函数的唯一性是通过函数名来区别的,函数不能同名,如果想写求比较int型和double型的最大值函数要用两个不同名的如下:

    double max_double(double a, double b)//求最大值
{
return a>b?a:b;
}
int max_int(int a, int b)//求最大值
{
return a>b?a:b;
}

而这样在JAVA中可以同名写出如下的代码:

    static double max(double a, double b)//求最大值
{
return a>b?a:b;
}
static int max(int a, int b)//求最大值
{
return a>b?a:b;
}

大家对比下可能会发现没多大区别啊,不还都是两个函数吗? 写的时候是没多大区别,但调用区别就大了。

在C语言中max_double(1.3, 1.5) 用来比较double, max_int(3,5)用来比较int。但实际上我要的就是比较两个数的大小嘛,直接用一个函数不就行了,为什么还要区分呢。

在JAVA里就不用区分了,直接用max(1.3, 1.5), max(3, 5)多人性。

有的人觉得没什么了不起嘛,不都是编写了两个函数。但JAVA的使用更高一个层次,这也是JAVA比C高级的地方,用JAVA开发的效率更高更好使用更符合现实世界。(但JAVA代码执行效率比C差,谁要跟我撕B这一点,我弄死他)。
      那么JAVA是如何做到的呢,其实也很简单,C以前是通过函数名来唯一区别的,现在JAVA是用函数名+参数来区别的。 在使用max(1.3, 1.5)参数是浮点数,所以会自己调用max(double a, double b), 如果是max(3,5)参数是整数,所以就调用max(int a, int b);

知道了上面的原理,所以可以分分钟写出让JAVA蒙B的代码,如下:

    static double max(double a, int b)//求最大值
{
return a>b?a:b;
}
static double max(int a, double b)//求最大值
{
return a>b?a:b;
}

调用mx = max(5,10); 立马编译错误,JAVA不知道该调用哪个max了。

2) 传值与引用:

        C语言里最强大也最让人郁闷的是--指针(这个答案是唯一的)。函数调用到底是传值还是传指针的,傻傻分不清楚,其实C参数传递就一种:形参与实参之间是简单的值拷贝,就这样简单。只是说指针之间的拷贝后,两个针指都可以操作能一块内存数据了。

如果两个人都能操作同一个东西,是不是可以说这两个人引用的是同一个东西呢?现实就是这样的。所以JAVA里叫引用,JAVA里是不是所有的都是引用呢,不是的JAVA跟C一样一样的,也是值拷贝。不过JAVA聪明点在于:除了基本类型(int , char double等),其它的所有类默认都是传指针。

请看如下代码:

public class Example {

    static void change(int a)
{
a = 10;
} public static void main(String[] args) {
int a=5;
change(a);
System.out.println(a);
}
}

执行结果很明显是5,change函数并没有取到改变的效果,因为就是简单的值拷贝。

用个类来试下:

public class Example {
static class Data {
int a;
}
static void change(Data dt)
{
dt.a = 10;
} public static void main(String[] args) {
Data dt = new Data();
dt.a = 5;
change(dt);
System.out.println(dt.a);
}
}

这个执行结果是10, change改变取到了效果。原理就是所有类之间的传递是通过指针传递,共用通一个东西,而JAVA把它写的非常简单,不需要用&和*来操作。

到这里整个世界都清晰了,更加证明了JAVA是从C上来的。

总结一下:

1) C下的知识都可以转到JAVA下,搞C的人没必要在纠结了,快快转吧。

2) JAVA里所有的类之间的传递都是指针地址,除了最基本的(int , double等类型)(本质跟C是一样的)。

3) 传说学好C语言以后,学其它的语言都容易,这句是真的呵呵

从C转到JAVA学习路之基本知识对比(转)的更多相关文章

  1. JAVA学习笔记—review基本知识[反射与异常]

    JAVA学习笔记—review基本知识[反射与异常] 1.异常: 1.1异常的分类: Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和E ...

  2. JAVA学习第二步,初级知识框架梳理

    回顾往期的学习,才发现已经学习了这么多知识点.这里复制了其他创作者的一些梳理结合自己的梳理.总结了自己在Java学习入门阶段的知识点.笔记自己了也写了详细的两本 第一章 Java面向对象 1-1包的定 ...

  3. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

  4. 从C转到JAVA学习路之struct与class对比(转)

    转自:http://blog.csdn.net/andywxf01/article/details/53506549 JAVA里最牛B的最基本的就是类,而C语言中的struct也可以定义自己的数据结构 ...

  5. JAVA学习笔记之与C#对比

    最近在学习java,刚学完入门课程...下面说一下入门课程中相对印象深刻的知识点 JAVA-C#差异 1. for循环 C# string [] strarr=new string[5]; forea ...

  6. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  7. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  8. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  9. java学习笔记1--基础知识

    1.java数据类型 2.类之间的几种关系

随机推荐

  1. python基础===正则表达式(转)

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  2. 本地搭建SVN局域网服务器【转】

    转自:http://blog.csdn.net/sunbaigui/article/details/8466310 参考链接:http://tortoisesvn.net/docs/nightly/T ...

  3. Java坦克大战 (一) 之产生一个窗口

    本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...

  4. 在另一个文本框显示input file选择的文件名字

    javascript 获取文件域 (type=file) 的完整路径一直是很麻烦的问题,问题主要出在一些浏览器基于安全性考虑而不能正常获取到文件域中选中图片的决对路径,尤其一些基于webkit的浏览器 ...

  5. [转]python dubbo接口测试

    转自:https://www.cnblogs.com/chunyanxu/p/8732734.html 会吐泡泡的鱼 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 57  文章- 0  评论- ...

  6. validate+jquery+ajax表单验证

    1.案例 1.1 Html form表单内容 <form class="cForm" id="cForm" method="post" ...

  7. HDU 1558 Segment set(并查集)

    题意: 给你一些线段的起点和终点的坐标,最后问和某个线段相连的或者间接相连的线段有多少个(包括本身)? P X1 Y1X2 Y2  起点(X1,X2)终点(X2,Y2):按照出现次数依次编号为1,2, ...

  8. 动态规划二:最长公共子序列(LCS)

    1.两个子序列:X={x1,x2....xm},Y={y1,y2....yn},设Z={z1,z2...zk}. 2.最优子结构: 1)如果xm=yn ,则zk=xm=yn且Zk-1是Xm-1和Yn- ...

  9. Dfs【p1454】 圣诞夜的极光

    题目描述-->p1454 圣诞夜的极光 题意概括: 寻找联通块数量,这里的连通块定义与其他的不同. 这里定义为曼哈顿距离不超过2的都属于一个联通块. 什么?不知道曼哈顿距离是啥? 曼哈顿距离简易 ...

  10. ZOJ 2112 Dynamic Rankings (动态第 K 大)(树状数组套主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...