java与c数据类型小结及简单java和c的hello程序

来源:互联网 发布:淘宝怎么看评价 编辑:程序博客网 时间:2024/06/06 10:36

本文主要基于讲叙最简单的java和c程序编写的区别,以及编译看效果,基于韦老师的视频,自己总结并重点分析了java与c数据类型的区别总结,不积跬步,无以至千里,基础知识是很容易被忽视及用错的,本文记录下来的方便之后使用,更加希望能给大家带来些许帮助

- hello程序
先让我们看c与java一个完整程序同样输出一个hello,world的方式
c语言:hello.c

1 #include <stdio.h>2 int main(int argc,char **argv)3 {4         printf("hello,world! hello qf!\n");5         return 0;                                                                                                                                                      6 }

编译命令:gcc -o hello hello.c
执行命令:./hello

pb-server@pbserver1:~/workspace/qinfeng/3gr$ vim hello.c pb-server@pbserver1:~/workspace/qinfeng/3gr$ gcc -o hello hello.c pb-server@pbserver1:~/workspace/qinfeng/3gr$ ./hello hello,world! hello qf!pb-server@pbserver1:~/workspace/qinfeng/3gr$ 

同样java代码:
Hello.java

public class Hello{    public static void main(String args[]){            System.out.println("hello,world! hello,qf!");               }}

编译命令:javac Hello.java
执行命令:java Hello

E:\qf项目20160603\java_study(2016)\01helllo>javac Hello.javaE:\qf项目20160603\java_study(2016)\01helllo>java Hellohello,world! hello,qf!E:\qf项目20160603\java_study(2016)\01helllo>

c语言的写法大家都很熟悉,主要是提醒几个java写法的注意点:
1.类名字Hello首字母习惯大写,小写也是可以的,并且java文件名要和类名一样
2.String 和 System.out.println都首字母大写

- java与c数据类型小结
java与c数据基本类型总结了一张表如下:

java与c数据类型表

从基本数据类型中可以看出,区别大概有几点
1.java中多了boolean,和byte数据类型,都是1字节的
2.c中char类型占用1个字节,java中占用2个字节
3.c中有指针类型,而java中有引用数据类型
4.c中有unsigned类型,java中没有

以下主要从指针定义及几个数组定义区别加深对java引用的了解:
c指针:
int* p=malloc(10*sizeof(int));
这里写图片描述

java 引用定义方法:
int p[] =new int[10];
这里写图片描述

  • 字符数组定义
    c语言:
    字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
    char str[10]={ ‘I’,’ ‘,’a’,’m’,’ ‘,‘h’,’a’,’p’,’p’,’y’};
    即把10个字符分别赋给str[0]到str[9]10个元素
    如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 ‘\0’ )。
    char str[10];
    这里写图片描述

java:
char str[]=new char[10];
char str[] —–栈
new char[10]—–堆
这里写图片描述

  • 静态初始化整形数组
    c语言:
    int p2[]={1,2,5};
    这里写图片描述

java语言
int p2[]={1,2,5};
这里写图片描述

由以上java关于数组的图示可以得知:
1.java 里面数组永远是引用类型,永远放在堆里面分配,栈里面存放的是地址值,地址指向堆空间,堆空间分配了3个int值的空间,空间中的值就是1 2 5
2.其次请注意,java声明一个数组不需分配任何存储空间,它仅仅是代表你试图创建一个数组。跟C/C++声明一个数组的明显区别就是空间的大小没有被特别标识。因此,下面的声明将会引起一个编译期错误。java 数组静态初始化不能指定长度
int num[5];
即:上面String str2=”abc”静态初始化的方法,如果改为String str2[3]=”abc”; 则在编译时报错。
一个数组的大小将在数组使用new关键字真正创建时被给定,例如:
int num[];
num = new int[5];
3. 对于数组初始化这个问题,关键在于要弄清楚数组变量和数组对象的差别。数组变量是存放在栈内存中的,数组对象是存放在堆内存中的。数组变量只是一个引用变量,他能够指向实际的数组对象。
所谓的数组初始化并非对数组变量初始化,而是对数组对象进行初始化。

  • 字符串定义
    c语言:
    char str2[]=”abc”;
    这里写图片描述

java语言:
String str2=”abc”;
这里写图片描述

可以看出java中是没有结束符的
java中无需结束符的原因
Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。比如,数组对象里有一个属性length,就是数组的长度,String类里面有方法length()可以确定字符串的长度,因此对于输出函数来说,有直接的大小可以判断字符串的边界,编译器就没必要再去浪费一个空间标识字符串的结束。
4.java字符串末尾空字符的处理
java和c通信的时候,由于c中的char中有结束符的,所以当java收到C发来的字符串时,后面往往会有若干空字符,如果不做处理的话,java会对其一并输出,为了将空字符处理掉不输出,可以采用如下两种方法:
方法一:
调用java字符串的trim()方法,该方法会将字符串前后的空字符读去掉。
方法二:自己实现去掉尾部空字符的方法:

/**     * 截取掉C中之前的字符串。即只截取前的字符     *     * @param s:尾部带有空字符的java字符串     * @return     * */       public static String deletTailChar0(String s){           if(s == null){               return null;           }           char[] chars = s.toCharArray();           StringBuffer sb = new StringBuffer();           for(char c : chars){               Character ch = c;               if(0 == ch.hashCode()){ //如果到了字符串结束,则跳出循环                   break;               }else{                   sb.append(c);               }           }           return sb.toString();       }    

最后我们根据c指针分配内存 int* p=malloc(10*sizeof(int));
可以通过 free(p)释放内存;
java中引用数据类型,使用new 来分配,不需要自己释放,只需要设置为null即可
比如说
int p[] =new int[10];
p=null;(垃圾回收机制会回收堆空间)

如果空间被多个变量引用
char str3=str;
必须设置
str=null;
str3=null;
(垃圾回收机制才会回收堆空间)

0 0
原创粉丝点击