Resposta curta: não.
O Java não gera um executável binário, mas apenas um bytecode como o C # (CLI), e isso não é bom para negócios sérios em "ambientes abertos" por dois motivos principais:
- a probabilidade de ficar preso na engenharia reversa é muito alta, especialmente em linguagens antigas e muito bem conhecidas, como Java
- você não tem controle total sobre o desempenho da máquina; no caso de Java, a JVM desempenha um grande papel assumindo o controle total.
É claro que toda linguagem tem suas próprias bibliotecas, mas devido à grande quantidade delas para cada linguagem, isso não é um problema real e não acho que seja o objetivo deste tópico.
Talvez em um nível profissional, você possa encontrar algo que possa infringir a regra, como um dev-Kit que pode traduzir todas as instruções C # em código de montagem para uma máquina do mundo real, mas se esse tipo de abordagem não estiver nos cartões, você é praticamente forçado a considere apenas o C e o C ++ para o seu desenvolvimento quando você pretende vender seu produto em um ambiente aberto.
As coisas são um pouco diferentes para os dispositivos móveis porque são "ambiente fechado", mesmo o Android é praticamente fechado, considerando o fato de que a fonte das ROMs do mundo real não costuma estar disponível ao público, o Android pode ser considerado de código aberto, mas o 99 % das ROMs em dispositivos reais não são. Nesse caso, você não pode discutir muito, tudo já está definido para você e todas as plataformas têm seu próprio idioma, como todo mundo sabe.
No final, se você pretende vender esses produtos em ambientes abertos, só posso sugerir linguagens que produzam código compilado e binário / assembly, em ambientes fechados, a decisão é tipicamente mais fácil de tomar por diferentes razões.