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数据基本类型总结了一张表如下:
从基本数据类型中可以看出,区别大概有几点
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;
(垃圾回收机制才会回收堆空间)
- java与c数据类型小结及简单java和c的hello程序
- Java与C连动时的数据类型分析
- java与C语言的数据类型对应
- C与java通讯小结
- python数据类型与c++,java数据类型区别
- 一些简单的java,c程序
- 数据类型,简单的C语言程序。
- 基本的数据类型(Java/C++)
- C语言与java的不同及平时编写java程序出现的错误
- Java程序与C语言的区别
- linux下java程序与C语言程序通过SOCKET通信的简单例子
- linux下java程序与C语言程序通过SOCKET通信的简单例子
- linux下java程序与C语言程序通过SOCKET通信的简单例子
- JAVA的简单数据类型和复合数据类型
- java的数据类型与c语言的区别
- Java数据类型和集合的小结
- Java 与 c 及c++的比较
- Java 与 c 及c++的比较
- Android autolayout万能的屏幕适配
- 题目太长so that没敢往这里贴。。。。-。-具体看正文
- 第九周OJ项目-大帆玩英雄联盟
- Ucos系统常用的数据结构有哪些?
- JAVA多线程笔记
- java与c数据类型小结及简单java和c的hello程序
- 第八周求值
- Git的安装与使用
- Dynamics CRM2016 使用web api来创建注释时的注意事项
- Android用简洁的方法对图片进行高斯模糊
- MQTT(1):项目应用简介
- CRC8算法
- 51nod-1266 蚂蚁
- 把下面的表格A以表格B的形式显示出来